Knockout.js ko.可观测数组包含数据,但它';s length属性的值为0
我有一个ko.observearray。我正在填充从服务器获得的一些值: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
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是异步工作的,所以必须在回调函数中调用它。