骨干模型初始化

时间:2014-02-18 12:37:56

标签: javascript backbone.js

我正在研究骨干,我正在尝试初始化一个对象,但是我从控制台得到了一个空对象。我做错了什么?

Month = Backbone.Model.extend({
    month:"a",
    values:[
        {label:"Total", value:0}, 
        {label:"Expenses", value:0},
        {label:"Profit", value:0}
    ]   
});
var x = new Month();
console.log(x.toJSON())

4 个答案:

答案 0 :(得分:3)

Backbone.Model是单个对象,您无法使用数组初始化它。

但你可以使用这样的单个对象初始化它:

Month = Backbone.Model.extend({
    defaults: {label:"Total", month:"a", value:0}   
});
var x = new Month();
console.log(x.toJSON())

答案 1 :(得分:1)

您要做的是设置该模型的默认值。

Month = Backbone.Model.extend({
  defaults:{
    month:"a", 
    values:[
        { total: { label:"Total", value:0 }}, 
        { expenses: { label:"Expenses", value:0 }}, 
        { profit: { label:"Profit", value:0 }}, 
    ]
  }
});

这将确保在创建Month对象时,它将在其属性中包含您在defaults对象中定义的那些属性。 (我已经改变了一些数据,但我认为你从我的例子中得到了想法)。

您可以在文档中阅读更多内容:http://backbonejs.org/#Model-defaults

  

默认值哈希(或函数)可用于指定模型的默认属性。在创建模型实例时,任何未指定的属性都将设置为其默认值。

答案 2 :(得分:0)

  

创建模型的实例时,您可以传递初始值   属性的值,将在模型上设置。如果你   定义一个 initialize 函数,它将在模型时调用   创建

Source

  

defaults 哈希(或函数)可用于指定默认值   模型的属性。在创建模型的实例时,任何   未指定的属性将设置为其默认值。

Source

答案 3 :(得分:0)

var Month = Backbone.Model.extend({
  // you put your Model's methods here or override existing Backbone Model methods here
});
var x = new Month({
  // you put the data of the model here
  month:"a",
  values:[
    {label:"Total", value:0}, 
    {label:"Expenses", value:0},
    {label:"Profit", value:0}
  ]
});
console.log(x.toJSON())

<强>更新 这里的一个重点是值数组将在此模型的所有实例之间共享,因为它在文件执行时被初始化并被value属性引用。因此,如果您有2个模型并且说更改模型1中数组中的Expenses值,则模型2中的Expenses也将更新。像https://github.com/powmedia/backbone-deep-model这样的东西可以帮助处理深层嵌套的数据。