Загрузка файла и его асинхронная обработка в WinRT - PullRequest
1 голос
/ 28 декабря 2011

В Visual Studio 11 я создаю приложение HTML5 Metro, которое читает и обрабатывает файл при инициализации. У меня есть следующий код:

var ws = Windows.Storage;

Debug.enableFirstChanceException(true);
var myDataSource = {};

var id = function (elementID) {
    return document.getElementById(elementID);
}

WinJS.Namespace.define('ToDoToday', {
    id: id,
});

function initialize() {
Windows.Storage.KnownFolders.documentsLibrary.createFileAsync("taskList.todo", Windows.Storage.CreationCollisionOption.openIfExists)

.then(function (file) {
    return file.openAsync(Windows.Storage.FileAccessMode.readWrite);
})

.then(function (stream) {
    var inputStream = stream.getInputStreamAt(0);
    var reader = new Windows.Storage.Streams.DataReader(inputStream);

    var size = stream.size;
    if (size > 0) {
        reader.loadAsync(size).then(function(){
            myDataSource = reader.readString(size);
        })
    }
})
.then(function () {
    WinJS.Namespace.defineWithParent(ToDoToday, 'Tasks', {
        data: myDataSource,
    })
})
.then(function () {
    WinJS.UI.processAll()
})
.then(function () {
    var basicListView = WinJS.UI.getControl(document.getElementById("taskChecklist"));
    basicListView.dataSource = ToDoToday.Tasks.data;
    basicListView.refresh;
});
}
document.addEventListener("DOMContentLoaded", initialize, false);

Функция инициализации никогда не загружает файл. Из-за связанных цепочек отладчик не возвращает ничего полезного. Точка останова на openAsync никогда не достигается.

Возможная ошибка в привязке данных:

Ошибка времени выполнения JavaScript: объект не поддерживает свойство или метод 'createListBinding'

Привязка работает нормально, если я не читаю из файла.

Я уверен, что моя проблема заключается в неправильном понимании того, как связывать асинхронные вызовы, и второй набор глаз не может повредить.

...