我一直在扩展基础骨干视图,并且每个部分都有一个基本视图,以便我可以在多个级别上进行扩展.我的问题是,查看混合的最有效方法是什么:可以混合到任何视图中的可重用视图部分.例如:
var BaseProfile = Backbone.View.extend({ ...});
var UserProfile = BaseProfile.extend({ ...});
var VideoSupport = Backbone.View.extend({ ...});
Run Code Online (Sandbox Code Playgroud)
将VideoSupport
视图(事件对象和一些方法)与UserProfile
视图混合的最佳方法是什么?
Der*_*ley 111
underscore.js库提供了一个执行所需操作的extend
方法.您可以在任何对象上定义功能,然后将该对象的所有方法和属性复制并粘贴到另一个对象.
Backbone extend
在Views,Models和Routers上的方法是下划线的包装extend
.
var MyMixin = {
foo: "bar",
sayFoo: function(){alert(this.foo);}
}
var MyView = Backbone.View.extend({
// ...
});
_.extend(MyView.prototype, MyMixin);
myView = new MyView();
myView.sayFoo(); //=> "bar"
Run Code Online (Sandbox Code Playgroud)
小智 19
我可能会建议使用Backbone.Cocktail,它提供了一种非常简洁的方法来指定mixins(尊重继承):
var Mixin = {
initialize: function() {
console.log("I'll be called as well as the class's constructor!");
}
};
var View = Backbone.View.extend({
mixins: [ MyMixin ]
});
Run Code Online (Sandbox Code Playgroud)
我在这篇博文中详细介绍了它.