根据您在问题中提供的信息,很难说出您的特定组件将如何最好地组件化。然而,一种强大的可重用策略是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);