2013-06-20 38 views
0

我有用於創建表單的JSON對象。這個JSON對象由KnockoutJS分析。如何更新表單中表示的JSON對象

現在,當我修改窗體時,我想根據窗體中所做的修改更新JSON對象。事情是,我不知道如何形式將是如何,但我知道在JSON對象哪些字段需要更新。

我真的不知道什麼是最好的處理方式。我知道每次有事情發生變化時我都可以重建JSON對象,但這似乎是一個糟糕的主意和一個乏味的過程。

有沒有簡單的方法來映射每個JSON對象字段在KnockoutJS中形成項目?

這裏的的jsfiddle什麼,我目前做:http://goo.gl/ZBaV7

更新:

我意識到這一行一些有趣的事情:

<input type="text" data-bind="value: $data.value, attr : { disabled: $data.disabled }" /> 

我直接訪問值從數組通過($ data.value)。有沒有一種方法可以在html中聲明敲除綁定到數組中的這個特定屬性。我知道,如果數組將被重新排序,所有事情都會變得混亂起來,但是因爲我知道唯一可以改變的就是這個屬性,我已經準備好承擔這個風險了?

換句話說,有沒有辦法手動說,當該值發生變化,以改變它在陣列中,如

data-bind="onChange: $data.value = this.value" 
+0

有一個JSFiddle總是很好,但它不應該是你唯一的代碼來源。你的小提琴中沒有太多的代碼,所以請更新你的帖子和代碼。 (然後你沒有把文本的一行代碼,只是爲了進入小提琴鏈接) – nemesv

+0

是的,事情是代碼是不是真正相關,它只是幫助看到我想說什麼。我縮短了網址。 – CoachNono

+0

[將JSON屬性綁定到窗體]的可能重複(http://stackoverflow.com/questions/7347580/bind-json-properties-to-a-form) – davidbuzatto

回答

1

有沒有簡單的方法來映射每個JSON對象字段以形成項目 KnockoutJS?

是的,如果我明白你想要做的正確。截至目前,您的視圖模型中的值不是可觀察的,並且在表單值更改時不會自動更新。有一個插件來處理這個映射。

http://knockoutjs.com/documentation/plugins-mapping.html

示例:使用ko.mapping

要創建經由所述映射插件的圖模型,替換在以上與ko.mapping.fromJS函數的代碼 視圖模型的創建:

var viewModel = ko.mapping.fromJS(data);

這將自動創建用於每個的可觀察到的特性數據屬性。然後,你每次收到來自 服務器新數據時,您可以通過 再次調用ko.mapping.fromJS功能更新視圖模型的所有屬性在一個步驟:

ko.mapping.fromJS(data, viewModel);

希望這有助於。

+0

它在這裏說:「每當你從服務器接收到新數據時,你都可以更新viewModel上的所有屬性」。是否有可能當我修改表單時,數組中的值得到更新?更像是它所說的在客戶端被修改時更新的相反方式? – CoachNono

+1

使用值綁定時,如果綁定到observable屬性,則當表單值更改時,observable屬性的值將在視圖模型中更新。你現在面臨的問題是你沒有使用可觀察量。使用映射插件創建初始視圖模型會將所有屬性包裝爲ko.observable/ko.observableArray,因此視圖模型中的值應隨着表單值的更改而更新。 – bfuoco

+0

「每當用戶編輯相關表單控件中的值時,KO都會更新您的視圖模型上的屬性。」 http://knockoutjs.com/documentation/value-binding.html – bfuoco

0

把你的JSON模型轉換爲可用的淘汰賽模式最簡單的方法是用mapping插件。

或者,您可以手動將字段從您的json模型複製到您的視圖模型的ko.observable成員中,從而爲您提供更多的控制,並允許您選擇跳過只讀屬性。