2014-03-26 75 views
0

我想創建(請坐下)一組模型。這些模型應該包含其他集合。女巫有一個名字,顏色和費用的集合。初始模型backbone.js

這裏是我的3個對象:

//model : Expense 
var Expense = Backbone.Model.extend({ 
    defaults: { 
     date: '', 
     cost: 0, 
     comment: '' 
    }, 
    initialize: function() { 
     console.log('expense : created'); 
    } 
}); 
//model : Category 
var Category = Backbone.Model.extend({ 
    defaults: { 
     name: '', 
     color: '#333', 
     expenses: Backbone.Collection.extend({ 
      model: Expense 
     }) 
    }, 
    initialize: function() { 
     console.log('expense : created'); 
    } 
}); 
//model : Wallet 
var Wallet = Backbone.Model.extend({ 
    defaults: { 
     categories: Backbone.Collection.extend({ 
      model: Category 
     }) 
    }, 
    initialize: function() { 
     console.log('wallet : created'); 
    } 
}); 

我做研究2天嵌套模式,但我真的不能找到一個辦法:

  • 我的錢包
  • 添加類別
  • 加上我的類別費用
  • modifiy他們

您認爲backbone nested modelsbackbone relational可以真正幫助我嗎?他們似乎很沉重...

我希望我的回答不是太愚蠢,我是一個骨幹的首發,並且它不是很容易進入!

問候, 湯姆

回答

1

如果你不想使用骨幹插件爲您嵌套模型,你可以做這樣的事情:

//model : Expense 
var Expense = Backbone.Model.extend({ 
    defaults: { 
     date: '', 
     cost: 0, 
     comment: '' 
    }, 
    initialize: function() { 
     console.log('expense : created'); 
    } 
}); 

//collection : Expenses 
var Expenses = Backbone.Collection.extend({ 
    model: Expense 
}); 

//model : Category 
var Category = Backbone.Model.extend({ 
    defaults: { 
    name: '', 
    color: '#333' 
    }, 
    initialize: function() { 
    this._ensureExpenses(); 
    console.log('expense : created'); 
    }, 
    parse: function(data){ 
    if(data.expenses){ 
     this._ensureExpenses(); 
     this.expenses.set(data.expenses, {parse: true}); 
    } 
    return _.omit(data, 'expenses'); 
    },  
    toJSON: function(){ 
    return _.extend(_.clone(this.attributes), { 
     expenses: this.expenses.toJSON() 
    }); 
    }, 
    _ensureExpenses: function(){ 
    this.expenses = this.expenses || new Expenses(); 
    } 
}); 

//collection : Categories 
var Categories = Backbone.Collection.extend({ 
    model: Category 
}); 

//model : Wallet 
var Wallet = Backbone.Model.extend({ 
    initialize: function() { 
    this._ensureCategories(); 
    console.log('wallet : created'); 
    }, 
    parse: function(data){ 
    if(data.categories){ 
     this._ensureCategories(); 
     this.categories.set(data.categories, {parse: true}); 
    } 
    return _.omit(data, 'categories'); 
    }, 
    toJSON: function(){ 
    return _.extend(_.clone(this.attributes), { 
     categories: this.categories.toJSON() 
    }); 
    }, 
    _ensureCategories: function(){ 
    this.categories = this.categories || new Categories(); 
    } 
}); 

如果您不需要序列錢包平淡JS對象或JSON可以刪除toJSON方法。

你可以在這裏測試:http://jsbin.com/luruvifi/1/edit?js,console

+0

哇,這太棒了!我會在代碼中瞭解它,但看起來很完美! 要添加費用或類別,我應該使用get/set還是在vanilla js(myWallet.Expenses.push({...}))中執行此操作? – tmos

+0

您可以使用collection.add(http://backbonejs.org/#Collection-add)添加新模型到collection:'myWallet.categories.first()。expenses.add({date:'24/12/2013' ,費用:4});' –

+0

恩,謝謝你!這真是一個很好的解決方案:) – tmos