knockout.js - 如何强制 observable 从 DOM 元素中读取值

标签 knockout.js

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

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

类似于 valueHasMutated 但以另一种方式。

谢谢

最佳答案

我意识到你已经想出了一个解决方案。

但我想我会发布我自己的,以防有人遇到这个问题,因为它在谷歌结果中排名靠前,没有答案,所以可能对某人有用。

 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);
        }

    };

和 html
<input type="hidden" name="myName"  id="myId"  data-bind="hiddenInputValue: myModelValue" >

由于隐藏输入通常没有更改事件,因此您需要在更改值时触发自己的事件,例如
$("#myId").trigger("change");

我不确定这是否是最好的解决方案,但我可以在我正在努力的时间范围内提供最好的解决方案:-) 如果我想出更优雅的东西,我可能会在 knockout 维基中加入一些东西。

关于knockout.js - 如何强制 observable 从 DOM 元素中读取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7169017/

相关文章:

javascript - knockout 订阅事件触发两次

javascript - knockout 订阅阻塞了页面

knockout.js - 是否可以对 bool ViewModel 属性的否定 ("!")进行可见的数据绑定(bind)?

即使呈现 jquery 模板,knockout.js 也会调用 click

javascript - Breeze knockout 值绑定(bind)输出函数

javascript - 如何在jquery中动态编写 knockout 数据绑定(bind)事件?

javascript - knockout.js:更新绑定(bind)?

javascript - knockout 使用 mouseenter 事件绑定(bind)而不是 mouseover

javascript - knockout 修改计算内的 ObservableArray

javascript - 在 knockout.js 中重用 ViewModel 之间的数据