用 javascript 改变复选框的状态不符合 MVVM 的精神。但我正在创建一个通用的 javascript 库,用于更好看的标准控件,如复选框、单选按钮或选择框。 基于以下 View 模型:
function MyViewModel() {
var self = this;
self.ok = ko.observable();
};
var vm = new MyViewModel();
ko.applyBindings(vm);
但是当我以编程方式更改复选框的选中状态时,我遇到了与 knockout 相关的问题:
document.getElementById('chk').checked = true
更改不会出现在 View 模型的属性中。但是当我点击复选框时一切正常。
有什么解决方法吗?
最佳答案
您的问题是 ko 订阅了 checked binding 中的 click
事件:
ko.utils.registerEventHandler(element, "click", updateHandler);
但是更改checked
属性不会触发点击事件,因此不会通知ko。
如果您在属性更改后手动触发点击事件,它可以工作...
我不知道如何用纯 javascript 做到这一点,但你可以用 jQuery 写:
$('#chk').attr('checked', true).triggerHandler('click')
你可以在这个JSFiddle
中测试.
关于mvvm - 编程更改不会反射(reflect)在 knockout View 模型中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13008283/