2012-09-28 50 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