2013-07-20 50 views
0

我已經創建了一個隱藏基於表元素的過濾器上被點擊「輸入」標籤的簡單骨幹查看:重構骨幹查看代碼,以消除重複

var Filter = Backbone.View.extend({ 
tagName: "form", 
events: { 
    "click input[name='2013']" : "filter2013", 
    "click input[name='2012']" : "filter2012" 
}, 
filter2013: function() { 
    $("tr:contains('2013-')").toggle(); 
}, 
filter2012: function() { 
    $("tr:contains('2012-')").toggle(); 
}, 
render: function() { 
    this.$el.html(JST['acquisitions/filter']); 
    $("#filter-container").append(this.$el); 
    return this; 
} 
}); 

不優雅可言,尤其是如果我想要添加更多'輸入'元素,這將在視圖中導致更多自定義函數重複代碼。也許一個for循環結合jquery在網頁中查找數字(比如說2013,2012和2011等),並根據這些數據生成事件。或者,也許我需要將這些事件完全從視圖中取出。

有什麼建議嗎?

回答

1

我想補充一個class<input> S,說class="year",使他們更容易找到,然後綁定點擊input.year事件,並搶出年度事件的currentTarget.name的。類似這樣的:

var Filter = Backbone.View.extend({ 
    // ... 
    events: { 
     "click input.year" : "filter_year" 
    }, 
    filter_year: function(ev) { 
     $("tr:contains('" + ev.currentTarget.name + "-')").toggle(); 
    }, 
    //... 
}); 
+0

感謝您的建議。有用。一些澄清:1.你爲什麼說有'class =「year」'更容易找到?引用name屬性似乎工作正常。 – tdkr

+0

'class =「year」'允許您通過一個''click input.year''綁定到感興趣的'','name'屬性在''之間變化,因此您必須設置在'events'中添加多個條目。 –