Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/405.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript inception models.js_Javascript_Backbone.js_Model View Controller - Fatal编程技术网

Javascript inception models.js

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

我想创建(请坐)一组模型。这些模型应该包含其他集合。女巫有名字,颜色和一系列的费用

以下是我的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天的研究,但我真的找不到一种方法:

  • 在我的钱包上添加类别
  • 在我的类别中添加费用
  • 修改它们
你觉得这真的能帮我吗?它们看起来很重

我希望我的回答不要太傻,我是一个有主心骨的新手,要想进入这个行业并不容易

问候,,
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})