このフィドルでわかるように、obervableArray のデフォルト値は空の配列です。したがって、初期化されていない obervableArray と空の obervableArray の間に違いはありません。
2 つの回避策があります。
より多くのオブザーバブルを宣言する:
function vm() {
var self = this;
self.tasksArr = ko.observableArray([]);
self.initilized = ko.observable(false);
self.canSee = ko.computed(function(){
var a = self.tasksArr().length;
return self.initilized() && a;
});
self.load = function () {
setTimeout(function () {
for (var i = 0; i < 100; i++) {
self.tasksArr.push(i);
}
self.initilized(true);
}, 1000);
}();
}
ko.applyBindings(new vm());
フィドルを見る
バインディングを遅らせることもできます
function vm() {
var self = this;
self.tasksArr = ko.observableArray();
self.load = function () {
setTimeout(function () {
/*for (var i = 0; i < 100; i++) {
self.tasksArr.push(i);
}*/
ko.applyBindings(x);
}, 1000);
}();
}
var x = new vm();
フィドルを見る
お役に立てば幸いです。