我想编写一个可重用的组件作为我的Backbone应用程序的一部分。从根本上说,我想写一个表单过滤器帮助器,所以我可以:
最终,我希望能够做到这样的事情:
// generic view.js
// to spawn a dropdown
formFilter('select', data);
// to spawn a series of checkboxes
formFilter('checkbox', data);
显然,模块代码会监听事件并处理工作。
我的问题是,创建可重用组件的标准方法是什么?谷歌并没有给我太多,而#documentcloud IRC并不是特别活跃。
答案 0 :(得分:4)
根据您在问题中提供的信息,很难说出您的特定组件如何最佳组件化。但是,可重用性的一个强大策略是 mixins 。
只需在简单的对象文字中定义方法,例如:
Mixins.filterable = {
filterForm: function(selector, data) {
this.$(selector)...
}
}
Mixins.sortable = {
sortForm: function(selector) {
this.$(selector)...
}
}
然后你可以将它们混合到任何View
的原型中:
_.extend(FooView.prototype, Mixins.filterable, Mixins.sortable);
然后,mixin方法将在FooView
的所有实例中可用。
render: function() {
//..
this.filterForm('select', this.model);
}
因为mixin方法将绑定到视图实例的上下文,所以您可以在mixin方法中引用this
和逻辑扩展名this.$el
。这将使您能够收听视图的事件:
Mixins.filterable = {
filterForm: function(selector, data) {
this.$(selector).on('change', this._handleFilterChange);
},
_handleFilterChange: function(e) {
//..
}
}
要在所有视图中使用这些方法,请将它们混合到Backbone.View
原型中:
_.extend(Backbone.View.prototype, Mixins.filterable, Mixins.sortable);