2013-08-28 8 views
5

同じ結果で2つの方法でビューモデルに関数を書くことができるようです。ノーマルのjavascript関数と計算のノックアウトの違い

通常のjavascript機能:計算

vm.Texts = function() { 
    var self = vm; 
    if (self.selectedFormat()) { 
    return self.selectedFormat().Texts(); 
    } 
}; 

KO:

vm.Texts = ko.computed(function() { 
    var self = vm; 
    if (self.selectedFormat()) { 
    return self.selectedFormat().Texts(); 
    } 
}); 

'VMが' ビューモデルとselectedFormatは、ビューモデル上で観察されています。いずれの場合も、選択された書式を変更すると、その機能がトリガされます。だから私の質問は、2つの方法の違いは何ですか?

+0

あなたの 'Texts'関数をどのように使っていますか? – nemesv

答えて

4

私はデータバインディングこれらの線に沿ってを想定しています:

<span data-bind="text: Texts()"></span> 

ボトムライン:結合の両方のケースで
textは、最初のレンダリングにselectedFormatへの依存関係を作成します。


詳細:

  1. 機能ケース
    あなたの状況の両方がspan理由を更新します。 textバインディングは、最初のレンダリング時に、あなたの関数内で呼び出されているため、観察可能なに依存していることがわかります。観測可能なものが変更された場合、KOのレジスタにその依存関係があり、textバインディングの更新がトリガーされます。依存関係は次のようになります。

    text binding --> depends-indirectly-on --> selectedFormat

    this fiddleを参照してください。

  2. 計算されたケースTextsは、現在観測可能なの仲介者として機能する(計算された)観測可能物に依存しているので、もう少し明白ですが、2番目のケースも同様に動作する可能性があります。依存性は以下のようになります。

    text binding --> depends-on --> Texts computed --> depends-on --> selectedFormat

    this fiddleを参照してください。

関連する問題