2012-02-07 81 views
5

我在很多Backbone.Views中使用_.bindAll下劃線bindAll,顯式方法命名

_.bindAll(this, 'render', 'addOne', 'addAll', 'someFunctionA', 'someFunctionB'); 

重構時,這變得非常乏味,因爲我需要保持視圖方法和名稱列表同步。這兩種方式往往導致簡單的錯誤。

由於bindAll的短版本可以消除這種需求,所以我想知道存在哪些缺點(性能,可讀性,靈活性),您認爲它們是可以接受的以獲得一點生產力提升。

_.bindAll(this); 

回答

4

使用該形式的bindAll沒有實際的性能損失。但是,如果您不希望出於某種原因綁定到this的方法將會很痛苦。

但是,您可能會發現無需像使用bindAll那樣經常使用bindAll。與事件處理程序綁定的所有方法(使用事件散列)將自動綁定到this。另外,當您明確地綁定一個事件時,您可以在第三個參數中傳遞this綁定。例如:

this.model.bind('change', this.render, this)

+0

謝謝。我增加的用法是由於應用程序範圍的eventBus,其中自動綁定不在位置:/ Thx用於指出綁定this,直接聲明模型綁定(注意:我認爲它應該是:this。 model.on')。最後,我很好奇:什麼情景,我不希望我的視圖方法被綁定到視圖本身? – SunnyRed 2012-02-07 18:10:07

+2

Right,Backbone 0.9現在使用「on」而不是「bind」,如0.5和之前一樣。在「觀看世界」中,我發現你幾乎總是希望這個觀點。但是,如果你真的將'this'的jQuery約定作爲一個事件目標,那麼這可能不適合你。就我個人而言,我喜歡使用'this'的一致性。 – maxl0rd 2012-02-07 19:38:53

4

心中已經使用_.bindAll(this)在骨幹工程一會兒。在對代碼進行分析後,我發現對_.bindAll的調用佔用了所有函數調用的重要部分。
基於性能測試http://jsperf.com/underscore-bindall-this-vs-bindall-this-params 的結果似乎明確的方法命名是更高性能的(特別是對於具有很多功能的對象)