如何强制observable从DOM元素中读取值

Hug*_*ata 20 knockout.js

我有一个隐藏的输入并将值绑定到我的模型的可观察属性.我正在使用另一个内部更新隐藏输入值的插件,但是observable不会更新它的值.

我如何强制observable从元素更新它的值?

类似于valueHasMutated,但在另一方面.

谢谢

Ale*_*ith 23

我意识到你已经提出了一个解决方案.

但是我想我会发布自己的任何人,因为它在谷歌搜索结果中没有任何答案,所以可能对某人有用.

 ko.bindingHandlers.hiddenInputValue = {

        init: function (element, valueAccessor) {

            $(element).bind("change", function (event, data, formatted) { //hidden vars don't usually have change events, so we trigger $myElement.trigger("change");
                var value = valueAccessor();
                value($(this).val()); //rather than $(this).val(), might be best to pass our custom info in data
            });
        },
        update: function (element, valueAccessor, allBindingsAccessor, viewModel) {
            var value = valueAccessor();
            $(element).val(value);
        }

    };
Run Code Online (Sandbox Code Playgroud)

和HTML

<input type="hidden" name="myName"  id="myId"  data-bind="hiddenInputValue: myModelValue" >
Run Code Online (Sandbox Code Playgroud)

因为隐藏的输入通常没有更改事件,所以当您更改值时,您需要触发自己的事件,例如

$("#myId").trigger("change");
Run Code Online (Sandbox Code Playgroud)

我不确定这是否是最好的解决方案,但是我能在时间表中找到最好的我正在努力:-)如果我想出一些更优雅的东西,我可能会把一些东西带进淘汰wiki.


Mou*_*nir 12

它通过添加$("hiddenInputId").trigger("change");我的情况而不添加ko绑定处理程序.

谢谢 !

  • 这应该是公认的答案,因为很可能jQuery用于更新隐藏字段的值.如果正在使用另一个库,那么使用该库完成的类似工作就可以了. (2认同)