2014-02-18 265 views
2

我正在学习骨干,我试图初始化一个对象,但是从控制台得到一个空对象。我究竟做错了什么 ?骨干模型初始化

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()) 

回答

3

A Backbone.Model是一个单一的对象,你不能用数组初始化它。

但是你可以用一个对象像这样初始化:

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

哦,我是多么愚蠢的我......谢谢你,我会在9分钟内接受 – Syd

0

创建一个模型的实例,你可以通过在属性的初始 值,这将是在模型上设置。如果您的 定义了initialize函数,则会在创建模型为 时调用该函数。

Source

defaults哈希(或功能)可以用来指定默认 您的模型属性。创建模型实例时,任何未指定的属性都将设置为其默认值。

Source

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()) 

UPDATE 这里很重要的一点是,该数值数组是怎么回事这个模型的所有实例之间共享,因为它在文件执行时被初始化为由value属性引用。因此,如果您有2个型号并且说在模型1中更改数组中的Expenses值,则模型2中的Expenses也会更新。类似https://github.com/powmedia/backbone-deep-model可能有助于处理深度嵌套的数据。

+1

这与OP想要的不同。在这里,您正在创建对象实例后设置值。在问题中,OP询问如何设置模型的值,而不是实例的值。 – Lix

+0

他问这个问题?他说:“我试图初始化一个对象,但我得到一个空对象” - 我展示了如何通常地“用值初始化一个对象”。为什么你认为他想要违约? – Karolis

+0

是什么让我觉得这是值的地方。它们被放置在模型的定义中,而不是在实例中。 – Lix

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对象时,它会在它的属性,您在默认设置中定义的属性对象。 (我已经改变了一些数据,但我认为你从我的例子中得到了这个想法)。

你可以阅读更多的文档中:http://backbonejs.org/#Model-defaults

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

+1

“月”是一个预定义的默认值,我想你忘了将它包含在默认值 – Syd

+0

@PanagiotisGeorgeRaditsas - oops。是的,你是对的。 – Lix