此代码将起作用:
var a = {};
a.b = ko.observable(1);
a.c = ko.computed(function(){ return a.b() + 1; });
这个不会(显然):
var a = {
b : ko.observable(1),
c : ko.computed(function(){ return a.b() + 1; })
};
可以说我真的需要像在第二个代码中那样定义我的对象,有没有办法解决这个问题?我有一个涉及 try/catch 和 setTimeout 的想法,但它会很丑陋,所以我想听听是否有人有其他想法。
编辑
事实证明,我不需要 try/catch,只需要一个 setTimeout,就可以将评估延迟到运行时之后。但我还是想听听你对此的评论。
var delayedComputed = function( comp, init ){
var a = ko.observable( init );
// added the initial value because some functions would like to use
// string or array methods, and would fail to do so on an "undefined"
setTimout(function (){
var b = ko.computed( comp );
b.subscribe(a);
a(b());
},1);
return a;
},
a = {
b : ko.observable(1),
c : delayedComputed(function(){ return a.b() + 1; },"")
};