Javascript inception models.js
我想创建(请坐)一组模型。这些模型应该包含其他集合。女巫有名字,颜色和一系列的费用 以下是我的3个对象:Javascript inception models.js,javascript,backbone.js,model-view-controller,Javascript,Backbone.js,Model View Controller,我想创建(请坐)一组模型。这些模型应该包含其他集合。女巫有名字,颜色和一系列的费用 以下是我的3个对象: //model : Expense var Expense = Backbone.Model.extend({ defaults: { date: '', cost: 0, comment: '' }, initialize: function () { console.log('expense : cr
//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天的研究,但我真的找不到一种方法:
- 在我的钱包上添加类别
- 在我的类别中添加费用
- 修改它们
Tom如果您不想为嵌套模型使用主干插件,您可以这样做:
//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();
}
});
如果您不需要将wallet序列化为纯JS对象或JSON,您可以删除toJSON方法
你可以在这里测试:哇,这太棒了!我现在会进入代码来理解它,但它看起来很完美!要添加费用或类别,我应该使用get/set还是像在vanilla js(myWallet.Expenses.push({…}))中那样做?您可以使用collection.add()向collection添加新模型:
myWallet.categories.first().Expenses.add({date:'24/12/2013',cost:4})代码>