2012-09-28 48 views
0

如果骨干模型(或集合)可能已经存在也可能不存在,那么如何扩展或混合?Backbone.js model mixins

这是我已经试过:

mymodels.A = ('A' in mymodels ? mymodels.A : Backbone.Model).extend({ 
/* url, initialize, parse, etc... */ 
}); 

mymodels.A = ('A' in mymodels ? mymodels.A.prototype : Backbone.Model).extend({ 
/* url, initialize, parse, etc... */ 
}); 

mymodels.A = _.extend('A' in mymodels ? mymodels.A : Backbone.Model, { 
/* url, initialize, parse, etc... */ 
}); 

的思考?

编辑:

mymodels.A = (mymodels.A || Backbone.Model).extend({ 
/* url, initialize, parse, etc... */ 
}); 

EDIT2:

采取不同的办法....见下文

回答

2

这实现了我正在尝试做的......这是创建模型的片段。最后,我创建一个对象并将整个对象传递给Backbone.Model.extend:

var mymodels = {}; 

mymodels.A = _.extend({}, mymodels.A, { 
    url: "http://www.google.com" 
}); 

mymodels.A = _.extend({}, mymodels.A, { 
    initialize: function(){ 
     this.set('mixin', 'TRUE'); 
    } 
}); 
mymodels.A = Backbone.Model.extend(mymodels.A); 

var model = new mymodels.A({'new': 'TRUE'}); 
0

答案尝试使用:

// ensure its created 
mymodels.whatever = mymodels.whatever || Backbone.Model.extend({...; // create it empty if you need 
// now if you want to extend do it knowing it's created 
mymodels.whatever = mymodels.whatever.extend({... 

如果mymodels.whaever存在,那么它将重新分配变量(不做任何事)。如果它不创建OR,则需要评估第二部分,即new,Backbone.Model或您用于创建模型的表达式(甚至是像{}那样的空)。

+0

谢谢@helios。试过...也没有工作(请参阅我上面的编辑) – timborden

+0

嗯,我试图说的是1)确保它创建2)扩展它。所以(1)点是一般的Javascript,而不是Backbone。如果mymodels.whatever不存在,创建它(如果需要,可以作为一个空模型)。只有然后扩大它:) – helios

+0

谢谢@ helios ...结束了从不同的角度来看问题(请参阅我的答案)...感谢你的帮助,思考它 – timborden