2

私は、モジュールの表示パターンを使用して実装されたViewModelを持っています。私はグローバルなノックアウトを利用して、これらの間でデカップリングされたデータの受け渡しを実現しています。私はマスターのViewModel内のViewModelのインスタンスを作成している今、何をやっている:モジュール作成時にko.subscribableへのサブスクリプションを初期化する

NameSpace.MasterViewModel = function(){ 
    var viewModel = new viewModel(), 
     initSubscription = function(){ 
      viewModel.initSubscription(); 
     }; 

    return { 
     initSubscription: initSubscription 
    } 
} 

そして、このようなビューモデルでサブスクリプションを初期化します

NameSpace.ViewModel = function(){ 
    var data, 
     initSubscription = function(){ 
      ko.postbox.subscribe("New Data"function(newData){ 
       this.data = newData; 
      }, this); 
     }; 

    return { 
     data: data, 
     initSubscription: initSubscription 
    } 
} 

これは動作しますが、私が知りたいですViewModelの作成時にサブスクリプションを初期化する方法があれば?私はpublic初期化関数を避けることができます。

+0

'ViewModel'コンストラクタ関数が実行されたときだけ' initSubscription'を実行できませんか? – Jeroen

答えて

0

ViewModelの作成時にサブスクリプションを初期化する方法はありますか?

NameSpace.ViewModel = function(){ 
    var data; 
    var self = this; 
    var initSubscription = function(){ 
      NameSpace.Postbox.subscribe(function(newData){ 
       self.data = newData; 
      }, this, "New Data"); 
     }; 

    initSubscription(); // <-- does exactly what you ask 

    return { 
     data: data, 
     initSubscription: initSubscription // <-- might be superfluous now 
    } 
} 
+0

私はそれを試みたが、うまくいかなかった。 'this'はsubscribe関数を呼び出すときにViewModelを参照しないためです。ちなみに、私はpostbox拡張機能を使っていますが、同じ結果です。私は自分の投稿を編集します。 – robbannn

+0

私は 'var self = this;'イディオムを使って 'this'問題の答えを調整しました。 – Jeroen

関連する問題