这是js:
var view = function(){
self.arry = ko.observable();
self.arry(ko.mapping.fromJS([{prop:'Test'},{prop:'Test'}]));
console.log(self.arry().length);
}
var v = new view();
可观察数组长度始终为零。我如何获得正确的长度?
编辑:
更新了JS并修复了错误。
http://jsfiddle.net/eRHTv/
var view = function(){
var self = this;
self.arry = ko.observableArray();
self.load_items = function(){
setTimeout(function(){
self.arry(ko.mapping.fromJS([{prop:'Test'},{prop:'Test'}]));
}, 100);
}
self.no_items_visible = ko.computed(function(){
return (self.arry().length == 0);
});
self.load_items();
ko.applyBindings(self);
}
var v = new view();
运行此项时,不会显示任何项目div,如果您执行self.arry = data,则视图将不会更新。
答案 0 :(得分:4)
首先是:你永远不会定义变量self
:
var self = this;
第二:如果输入是一个数组,则ko.mapping.fromJS()返回一个可观察的数组:
self.arry = ko.mapping.fromJS(...);
总计:
var view = function() {
var self = this;
self.arry = ko.mapping.fromJS([ {prop:'Test1'}, {prop:'Test1'} ]);
console.log(self.arry().length);
}
var v = new view();
答案 1 :(得分:2)
这篇文章解释了为什么可观察数组的长度总是等于0。 实际上,一个可观察的数组(由ko.observableArray(...)返回)是一个函数。任何函数都有一个length属性。
更多信息:
https://github.com/knockout/knockout/issues/4
所以,你应该总是使用:myObservableArray()。length而不是myObservableArray.length。