2013-07-20 44 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'中添加多个条目。 –