dom文本更改时更新knockoutjs viewmodel

时间:2012-02-12 04:56:52

标签: javascript knockout.js

我需要在更新绑定表格单元格文本时更新底层数据。

我需要做些什么才能使更新生效?

示例:http://jsfiddle.net/2hdRp/1/

3 个答案:

答案 0 :(得分: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 :(得分:1)

您应该更改基础值,即observable,而不是更新DOM。

答案 2 :(得分:1)

好的,这是一个糟糕的例子。我想知道如果在没有输入控件的情况下dom发生变化时更新ViewModel,如contenteditable或更新dom的动态控件。

无论如何,我喜欢AlfeG的回答和类似的回答here

但是,我选择使用新的dataFor辅助函数。使用它,我可以轻松更新底层的ViewModel。

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