このコードは動作します:
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; })
};
2番目のコードのようにオブジェクトを定義する必要があるとしましょう。それを解決する方法はありますか? 私はtry/catchとsetTimeoutを含むアイデアを持っていますが、それは醜いものになるので、誰かが別のアイデアを持っているかどうか聞きたかった.
編集
ランタイムを過ぎて評価を遅らせるには、setTimeoutだけで、try/catchは必要ありません。それにもかかわらず、私はそれについてあなたのコメントを聞きたいです.
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; },"")
};