将两个 backbone 集合扩展到另一个 backbone 集合
Extend two backbone collections into another backbone collection
我有
CollectionA = Backbone.collection.extend({ a : function() {} });
CollectionB = Backbone.collection.extend({ b : function() {} });
如何将 CollectionC
定义为包含 CollectionA
和 CollectionB
的所有函数以及它自己的函数 c
的集合?
_.extend(CollectionC,CollectionB,CollectionA)
您可以在 _.extend
的帮助下将 CollectionA
和 CollectionB
的原型混合到 CollectionC
的原型中:
var A = Backbone.Collection.extend({
a: function() { console.log('a'); },
croak: function() { console.log('croak a'); }
});
var B = Backbone.Collection.extend({
b: function() { console.log('b'); },
croak: function() { console.log('croak b'); }
});
var C = Backbone.Collection.extend({
c: function() { console.log('c'); },
croak: function() { console.log('croak c'); }
});
_.extend(C.prototype, A.prototype, B.prototype);
var c = new C();
c.a(); // outputs a
c.b(); // outputs b
c.c(); // outputs c
注意,如果一个方法被定义多次,会被最后一个混进去遮蔽:c.croak();
会输出b
还有一个演示 http://jsfiddle.net/nikoshr/yjb3g3e3/
如果你想阻止某些方法的隐藏,你可以 pick/omit 来自 mixin:
_.extend(C.prototype,
_.omit(A.prototype, 'croak'),
_.omit(B.prototype, 'croak')
);
c.croak(); // outputs c
http://jsfiddle.net/nikoshr/yjb3g3e3/1/
或之后在 C 上设置该方法:
var C = Backbone.Collection.extend({
c: function() { console.log('c'); }
});
_.extend(C.prototype, A.prototype, B.prototype);
C.prototype.croak = function() { console.log('croak c'); }
我有
CollectionA = Backbone.collection.extend({ a : function() {} });
CollectionB = Backbone.collection.extend({ b : function() {} });
如何将 CollectionC
定义为包含 CollectionA
和 CollectionB
的所有函数以及它自己的函数 c
的集合?
_.extend(CollectionC,CollectionB,CollectionA)
您可以在 _.extend
的帮助下将 CollectionA
和 CollectionB
的原型混合到 CollectionC
的原型中:
var A = Backbone.Collection.extend({
a: function() { console.log('a'); },
croak: function() { console.log('croak a'); }
});
var B = Backbone.Collection.extend({
b: function() { console.log('b'); },
croak: function() { console.log('croak b'); }
});
var C = Backbone.Collection.extend({
c: function() { console.log('c'); },
croak: function() { console.log('croak c'); }
});
_.extend(C.prototype, A.prototype, B.prototype);
var c = new C();
c.a(); // outputs a
c.b(); // outputs b
c.c(); // outputs c
注意,如果一个方法被定义多次,会被最后一个混进去遮蔽:c.croak();
会输出b
还有一个演示 http://jsfiddle.net/nikoshr/yjb3g3e3/
如果你想阻止某些方法的隐藏,你可以 pick/omit 来自 mixin:
_.extend(C.prototype,
_.omit(A.prototype, 'croak'),
_.omit(B.prototype, 'croak')
);
c.croak(); // outputs c
http://jsfiddle.net/nikoshr/yjb3g3e3/1/
或之后在 C 上设置该方法:
var C = Backbone.Collection.extend({
c: function() { console.log('c'); }
});
_.extend(C.prototype, A.prototype, B.prototype);
C.prototype.croak = function() { console.log('croak c'); }