gpt4 book ai didi

mvvm - 编程更改不会反射(reflect)在 knockout View 模型中

转载 作者:行者123 更新时间:2023-12-01 10:58:56 25 4
gpt4 key购买 nike

用 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 模型的属性中。但是当我点击复选框时一切正常。

http://jsfiddle.net/KWdZB/1/

有什么解决方法吗?

最佳答案

您的问题是 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com