1

我有一个 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());-- 不返回任何内容

请帮忙。

4

1 回答 1

1

您可能会尝试AllItems在(异步)jQuery Ajax 调用完成之前提醒 的值。您可以通过使用jQuery XHR promises来解决这个问题,例如donepromise:

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());
});
于 2013-07-15T03:56:32.940 回答