我有一个ko.observablearray。我填充了从服务器获得的一些值:
self.AllItems = ko.observableArray([]);
$.getJSON('/Controller/GetItems', function (data) {
for (var index = 0; index < data.length; index++) {
self.AllItems.push(data[index]);
}
};
});
我知道这个工作得很好,因为我将数组绑定到列表并且包含所有项目。
<select multiple="multiple" size='4' data-bind="options:$root.AllItems, selectedOptions:$root.ItemsSelectValue"> </select>
但是,之后我无法访问AllItems的任何元素。
alert(self.AllItems().length);
- 返回0
alert(self.AllItems());
- 不返回任何内容
请帮忙。
答案 0 :(得分:1)
您可能尝试在(异步)jQuery Ajax调用完成之前警告AllItems
的值。您可以使用jQuery XHR promises来解决这个问题,例如done
承诺:
self.AllItems = ko.observableArray([]);
// Perform the XMLHttpRequest, and store the XHR object in a variable
var getItemsXHR = $.getJSON('/Controller/GetItems', function (data) {
for (var index = 0; index < data.length; index++) {
self.AllItems.push(data[index]);
}
});
// Wait for the XMLHttpRequest to finish before reading AllItems
getItemsXHR.done(function(data, textStatus, jqXHR) {
alert(self.AllItems().length);
alert(self.AllItems());
});