2014-02-18 447 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