注意:我的 CoffeeScript 生锈了,所以我在 JS 中回答这个问题,但这个想法应该翻译。
显然,解决这个问题的一种方法是给你所有的视图一个父类,然后在那个类中放置像handleError这样的方法。但是,如果您正在寻找一种更像“mixin”的添加方法的方式,您也可以这样做。
骨干视图使用 extend 方法的参数初始化,如下所示:
var MyView = Backbone.View.extend({
someMethod: function(){ doSomething();}
});
这个论点并不神奇。它只是一个 JS 对象,因此您可以使用 _.extend 对其进行扩展,如下所示:
var myCommonMethods = {
handleError: function ...
}
var MyView = Backbone.View.extend(_({
someMethod: function(){ doSomething();}
}, myCommonMethods));
这种方法的优点是您可以根据需要“混入”尽可能多的方法集,而如果您使用父类,则会受到更多限制。父类方法虽然更简单:
var BaseView = {
handleError: function ...
}
var MyView = BaseView.extend({
someMethod: function(){ doSomething();}
});
所以这真的取决于你的特殊需求。
就我个人而言,在我的代码中,我使用了这两种方法:我有一个 BaseView,我的所有视图都扩展了它,并且我将极其常见的逻辑(比如我们的大多数视图使用的模板系统)放入其中。然后我有各种方法集的“混合”,这些方法集添加了额外的功能。
例如,我为所有以“select”元素作为 el 的视图混合了一组方法;这让那些视图拥有对它们有意义的任何基类,但仍然有一组通用的方法(例如,它们都有一个 selectOption 方法,它让我可以在视图的 el 中为特定选项添加“selected”属性)。希望有帮助。