2012-02-12 119 views
0

更新綁定表單元格文本時,需要更新下層數據。當dom文本更改時更新knockoutjs視圖模型

我需要做些什麼來使更新工作?

例如:

+2

爲什麼你更新單元格文本,而不是直接更新基礎數據? knockout.js的要點是你可以使用你的視圖模型,不用擔心更新UI - 框架會爲你考慮。如果以後你想改變表示(例如從表格切換到div),則不必更改任何代碼,只需更改html並設置綁定即可。 – 2012-02-12 17:31:19

回答

0

好吧,這是一個壞的問題,一個壞的例子。我想知道如何在沒有輸入控件的情況下更改ViewModel,比如contenteditable或更新dom的動態控件。

無論如何,我喜歡AlfeG的回答和這個相似的答案here

但是,我選擇使用新的dataFor輔助函數。使用它,我可以輕鬆更新底層的ViewModel。

例子:http://jsfiddle.net/2hdRp/3/

1

我不知道這是不是已經在KnockoutJs框架中實現。

這是我的自定義綁定您的問題:

ko.bindingHandlers.textValue = { 
    init: function(element, valueAccessor, allBindingsAccessor, viewModel) { 
     // First get the latest data that we're bound to 
     var value = valueAccessor(), allBindings = allBindingsAccessor(); 
     var valueUnwrapped = ko.utils.unwrapObservable(value); 

     $(element).change(function(){ 
      value($(this).text()); 
     }); 
    }, 
    update: function(element, valueAccessor, allBindingsAccessor, viewModel) { 
     var value = valueAccessor(), allBindings = allBindingsAccessor(); 
     var valueUnwrapped = ko.utils.unwrapObservable(value); 
     $(element).text(valueUnwrapped); 
    } 
}; 

綁定的樣子:

<td id="idCell" data-bind="textValue: Car.id, valueUpdate: 'change'" 
    class="header"></td> 

工作例如:http://jsfiddle.net/AlfeG/dNtNb/

1

你應該改變的潛在價值,可觀察到的,而不是更新DOM。

相關問題