В 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'
Привязка работает нормально, если я не читаю из файла.
Я уверен, что моя проблема заключается в неправильном понимании того, как связывать асинхронные вызовы, и второй набор глаз не может повредить.