2017-10-18 19 views
1

私はrequirejs/crossroadsセットアップを使用します。ノックアウト:観測値を変更する

ko.applyBindings({ 
    route: router.currentRoute, 
    user: { 
     ... 
    }, 
    ... 
    loading: ko.observable(false), 
    setLoadingState: function(newState) { 
     this.loading(newState); 
    } 
}); 

(のparamsを経由して渡された)コンポーネントからsetLoadingState関数を呼び出し、それはloading機能/ undefinedではないことを私に伝えます:

これは、いくつかのグローバルプロパティを持つ私のブートストラップです。

このようなメカニズムを実装する正しい方法は何ですか?

答えて

3

あなたの(?)の例では、直接呼び出すことができるloadingに転送するだけなので、追加のメソッドは必要ありません。 (あなたも、より現代的なclass構文を使用することができます)

var MyApp = function(router) { 
 
    this.route = router.currentRoute, 
 
    this.loading = ko.observable(false); 
 
}; 
 

 
MyApp.prototype.setLoadingState = function(newState) { 
 
    this.loading(newState); 
 
}; 
 

 

 
ko.applyBindings(new MyApp(router));


どちらのthisはそうのようなあなたのビューモデルを参照することを確認するためのパターンのようなクラスを使用します

、または「ファクトリ」関数を使用してプレーンオブジェクトを使用してください:

var MyApp = function(router) { 
 
    var route = router.currentRoute, 
 
    var loading = ko.observable(false); 
 
    var setLoadingState = function(newState) { 
 
    loading(newState); 
 
    }; 
 
    
 
    // Expose what you want to expose: 
 
    return { 
 
    loading: loading, 
 
    setLoadingState: setLoadingState 
 
    }; 
 
}; 
 

 
ko.applyBindings(MyApp(router));

+1

重要:私はちょうどそれを直接呼び出すことができ、クラスの必要はありません。あなたの例の順序を変更したいですか?たぶん誰かが気付かないでしょう。さまざまなソリューションに感謝します。 – sandrooco

関連する問題