2017-06-21 6 views
2

ノックアウトウェブアプリに現在の時刻を表示し、毎秒更新したいと思います。私が検討している2つの解決策があります。どのアプローチがより適切かを判断しようとしています。ノックアウトでVMからカスタムバインディングにロジックを移動する方が適切なのはいつですか?

アプローチ1:ビューモデル・ロジック

JS:

vm.currentTime = ko.observable(Date.now()); 
setInterval(function() { 
    vm.currentTime(Date.now()); 
}, 1000); 

HTML:

<span data-bind="text: currentTime"></span> 

アプローチ2:カスタムバインディング

JS:

vm.getTime = function() { 
    return Date.now(); 
}; 

HTML:結合

<span data-bind="textInterval: { cb: getTime, interval: 1000 }"></span> 

textIntervalは、それが本質的に指定された間隔でコールバックを呼び出し、戻り値を持つノードを更新することになる結合習慣です。また、domNodeDisposalの間隔もクリアされます。

いくつ

は注意する:

  • 時間を取得するためのロジックが実際に示されるよりも、より複雑で、VMに属していない結合
  • ユニットテストは関係なく、アプローチの私たちにとって重要です

私は両方のアプローチの間に大きな差がありません実現が、私はノックアウト哲学の中で最も正しいアプローチでより興味があります。 VMからカスタムバインディングにロジックを移す必要がありますか?

答えて

2

documentation

を言う[カスタムバインディングを作成する]観測はDOM要素と をやり取りする方法を制御する方法で、簡単に再利用して 洗練された振る舞いをカプセル化するために、あなたに多くの柔軟性を提供します方法。

KnockoutにDOM要素とのやりとり方法を伝える必要がある場合は、カスタムバインディングを使用します。これは通常、自分で作成したい他のツールキットや特殊なウィジェットによって提供されるウィジェットのようなものです。 DOM要素を操作する必要がない場合は、おそらくカスタムバインディングは必要ありません。

関連する問題