2013-03-13 97 views
2

骨幹模型.get().set()如果您的值是簡單屬性,那麼這些例程都可以。我已經繼承了一個應用程序,但其值也是JSON對象。骨幹模型,JSON和HTML表格

model.get("key")返回

{start: 
    {top:5, bottom:6}, 
    end:{...} 
} 

等設置任何使用.set()這些值是皮塔餅,因爲你必須拔出舊值,讓你想要的變化,踢它回。即如果我需要bottom = 7,則不能僅僅執行.set("start.bottom",7)。我需要做的是這樣的:

var tempValue = model.get("start"); 
tempValue.bottom = 7; 
model.set("start",tempValue) 

模型有一個屬性,屬性,在這裏你可以model.attributes.start.bottom = 7。現在這大概不會觸發任何事件處理程序,因爲查看Backbone代碼,這在set中完成。

所以兩個問題:

  • 如果我不需要改變處理火,有什麼不對 與設置屬性直接。
  • 有沒有辦法在設置屬性後手動觸發 更改處理程序?

的骨幹更新日誌說 - 「的型號更改方法已被刪除,因爲延遲屬性的變化是不再可用」但是我不完全知道爲什麼會。這聽起來很有用。

與此相關:我也試圖將HTML表單解析到模型中。我一直在試圖使用ModelBinder,但它無法處理嵌套的JSON。例如<input type="text" name="start.top">

編輯: 我剛剛意識到你可以用對象做model.set({})。例如model.set({start :{top:7}});但它是一個有點笨重

回答

2
  1. 如果我不需要改變處理火,有什麼不對的設置屬性直接。

我認爲這可能會回答你的問題: Backbone.js get and set nested object attribute

  • 反正是有屬性的設置後,手動點火的變化處理的?
  • set方法(沒有無聲選項)觸發2個事件: 「改變」 和 「改變:的attributeName」。

    如果你需要它,你可以手動調用觸發它們:

    model.trigger("change change:attributeName")