2017-06-21 49 views
2

我想在我的Knockout網絡應用程序中顯示當前時間,並讓它每秒更新一次。我正在考慮兩種解決方案,我試圖確定哪種方法更合適。何時將邏輯從VM移至Knockout中的自定義綁定更合適?

方法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元素,則可能不需要自定義綁定。