Knockout.js ko.可观测数组包含数据,但它';s length属性的值为0

Knockout.js ko.可观测数组包含数据,但它';s length属性的值为0,knockout.js,ko.observablearray,Knockout.js,Ko.observablearray,我有一个ko.observearray。我正在填充从服务器获得的一些值: self.AllItems = ko.observableArray([]); $.getJSON('/Controller/GetItems', function (data) { for (var index = 0; index < data.length; index++) { self.AllItems.push(data[index]); } }; }); self.AllItem

我有一个ko.observearray。我正在填充从服务器获得的一些值:

self.AllItems = ko.observableArray([]);

$.getJSON('/Controller/GetItems', function (data) {
   for (var index = 0; index < data.length; index++) {
   self.AllItems.push(data[index]);
   }
 };
});
self.AllItems=ko.observearray([]);
$.getJSON('/Controller/GetItems',函数(数据){
对于(var index=0;index
我知道这样做很好,因为我将数组绑定到列表中,它包含所有项

<select multiple="multiple" size='4' data-bind="options:$root.AllItems, selectedOptions:$root.ItemsSelectValue"> </select>

但是,之后我无法访问AllItems的任何元素。
警报(self.AllItems().length)--返回0

警报(self.AllItems())--不返回任何内容


请提供帮助。

在(异步)jQuery Ajax调用完成之前,您可能试图提醒
AllItems
的值。您可以通过使用
done
promise来解决此问题:

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());
});
self.AllItems=ko.observearray([]);
//执行XMLHttpRequest,并将XHR对象存储在变量中
var getItemsXHR=$.getJSON('/Controller/GetItems',函数(数据){
对于(var index=0;index
您可能试图在(异步)jQuery Ajax调用完成之前提醒
AllItems
的值。您可以通过使用
done
promise来解决此问题:

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());
});
self.AllItems=ko.observearray([]);
//执行XMLHttpRequest,并将XHR对象存储在变量中
var getItemsXHR=$.getJSON('/Controller/GetItems',函数(数据){
对于(var index=0;index
您的代码应该可以工作。获取数据后,您的警报在
$.getJSON
回调中何时执行?你可以在JSFIDLE中创建一个repro吗?你确定你在
getJSON
返回数据后调用
alert
吗?我不确定如何模拟FIDLE中的服务器调用。
function(data)function(data){
function(data){
?你在哪里调用alert(self.AllItems().length)由于getJSON是异步工作的,您必须在回调函数中调用它。您的代码应该可以工作。获取数据后,您的警报何时在
$回调中执行。getJSON
回调中是否可以在JSFIDLE中创建一个repro?您确定在
getJSON
返回数据后调用
alert
吗?我不确定如何调用它imic在FIDLE中调用服务器。
function(data)function(data){
function(data){
?在哪里调用了警报(self.AllItems().length);?由于getJSON是异步工作的,所以必须在回调函数中调用它。