2012-11-22 67 views
1

在我的Backbone應用程序中,當我從HTTP JSON API檢索數據時,模型被實例化。值從這個服務不同,所以我決定提供defaults的一致性,所以所有的模型共享至少相同的基本屬性。例如對於模板有用。骨幹模型默認值:null?空字符串?空陣列?

我只是想知道:什麼是最好的價值分配給每個屬性?一些將是字符串,一些數字,其他數組。不知道我是否應該爲每個人默認分配null(這就是我現在所做的),或者如果我將未來的字符串使用空字符串"",未來數組使用空數組[]

+1

這取決於你需要什麼。例如,如果您有日期字段,則可以將當前時間用作默認值。有了數組,它會使用''[]''。字符串可以爲null或''''''',你想要檢查的是什麼(''str ==「」''或''typeof str ==「undefined」'') – 23tux

+1

我將主要使用models屬性模板(使用Handlebars),所以我只需要檢查值的虛假性。目前時間不適用於我的應用程序。 – DjebbZ

回答

3

我通常會分配null值。我不太可能使用null作爲實際值來傳遞,所以如果我的應用程序中有某些東西仍然存在null我可以說某處出了問題。

順便通過defaults屬性分配空數組或對象時要小心。當你這樣做時,數組/對象在每個實例中被引用,而不是複製到模型的每個實例,所以它們都會修改相同的數據。

+0

不知道我得到你的第二段:你是說,不知何故,創建一個空的數組/對象在內存中創建一個單一的值,創建時指向每個實例?我在300行的骨幹源代碼(0.9.2)中看到,賦值完成的方式與'options.unset?現在刪除[attr]:now [attr] = val;'(它是now [attr] = val,它真的會將值添加到實例中)。所以你說如果我創建一個空的數組/對象,這個非常空的數組/對象將在實例化時被我的集合的每個模型引用。 – DjebbZ

+3

@DjebbZ:如果你缺省:{a:[]}'那麼相同的默認數組將被所有使用默認值的實例共享,默認值被複制。但是,您可以說'defaults:function(){return {a:[]}}'爲每個實例獲取不同的默認值。一般來說,如果任何值都是可變對象,你會想要使用默認的函數形式。 –

+0

謝謝你們,在我的情況下,我會堅持'null'。我不需要'default'的'function'形式,因爲它充滿'null'值。順便說一下,如果要使用像@ muistooshort這樣的函數形式,是否意味着如果在實例化模型時未覆蓋屬性'a',我的程序會佔用較大的內存空間? – DjebbZ