在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);
初始化函数从不加载文件。由于链接的thens,调试器不返回任何有用的东西。 openAsync上的断点永远不会被击中。
最终错误发生在数据绑定:
JavaScript运行时错误:对象不支持属性或方法'createListBinding'
如果我不从文件中读取,绑定似乎工作正常。
我确信我的问题是如何链接异步调用的功能性误解,第二组眼睛不会受到伤害。