2014-05-07 23 views
0

我得到這個結合淘汰賽微調:如何加快bindingHandler的jQuery UI的微調

ko.bindingHandlers.spinner = { 
    init: function (element, valueAccessor, allBindingsAccessor) { 
     //initialize datepicker with some optional options 
     var options = allBindingsAccessor().spinnerOptions || {}; 


     $(element).spinner(options); 

     //handle the field changing 
     ko.utils.registerEventHandler(element, "spinchange", function() { 
      var observable = valueAccessor(); 
      observable($(element).spinner("value")); 
     }); 

     //handle disposal (if KO removes by the template binding) 
     ko.utils.domNodeDisposal.addDisposeCallback(element, function() { 
      $(element).spinner("destroy"); 
     }); 

    }, 
    update: function (element, valueAccessor) { 
     var value = ko.utils.unwrapObservable(valueAccessor()), 
      current = $(element).spinner("value"); 

     if (value !== current) { 
      $(element).spinner("value", value); 
     } 
    } 
}; 

它的工作原理沒有問題,但是當我有很多這些添加到頁面中,我得到的性能問題。 在我的頁面上我有44個spinners,導致視圖加載2秒。用一個「價值」替代微調器綁定解決了性能問題,但看起來不太好。 任何建議如何加快bindingHandler,使其更高效?

+2

你可以在jsFiddle中重新創建問題嗎? –

+0

太大又複雜。我已經測試過,像上面提到的spinner.handler一樣花時間...... –

+0

如果你想重新創建太大而複雜的內容,而不是你期待的能力如何? –

回答

0

您的自定義綁定中沒有任何內容顯着減慢速度。綁定是將jQuery UI插件與Knockout相結合的最簡單形式的完美示例。我有很多像這樣的綁定,有數百個添加到頁面,沒有性能問題。

那麼問題是什麼?我們不能告訴你,因爲相關的代碼不存在。此功能中最慢的部分可能是微調器本身,而不是您創建的綁定。爲了加快速度,你需要優化微調插件。我不知道這是否完全可能,因爲您的帖子中提到的這個插件沒有任何內容。

完全不同的說明:在頁面上顯示44個旋鈕可能不會幫助用戶體驗。也許你應該放慢調整器的使用:p

+0

用一個純粹的「值」綁定替換微調器會解決性能問題,所以我猜想它是微調處理器。 –