更新淘汰视图模型属性时激发更改事件
Firing change event when knockout view model property is updated
这里有一个jsfiddle来展示问题所在:
http://jsfiddle.net/boblauer/BgvV4/
我正在尝试在更新文本字段后激发更改事件。不幸的是,在subscribe方法中,文本框的值还没有更新,所以当我计算更改事件时,它被过早地触发了。
我需要触发更改事件,因为我有超出我控制范围的第三方代码,它依赖于更改事件。
有什么建议吗?
一个简单的解决方案是将对$("#text1").change()的调用封装在setTimeout中,超时值为0。这足以让knockout在调用jquery更改处理程序之前对文本框值进行(同步)更新。
我用你的小提琴来演示:http://jsfiddle.net/SuRYa/1//
如果这是您需要做的很多事情,那么更好的解决方案可能是将此行为封装在自定义绑定中,其中绑定的"更新"回调将在更新的元素上触发jquery更改事件。
bmode是对的,自定义绑定就可以了。虽然这个答案有点晚,但这里是绑定,以防它能帮助后续阅读本文的人。它使用jQuery更新文本框的值——DOM现在已经更新,以便Bob的第三方代码能够工作——所以它会触发更改事件。
ko.bindingHandlers.valueAndFireChange = {
update: function(element, valueAccessor) {
var val = ko.unwrap(valueAccessor());
if (val == undefined) return;
$(element).val(val);
$(element).change();
}
};
下面是Bob小提琴的更新版本,展示了这一点:
http://jsfiddle.net/BgvV4/17/
我将警报更改为console.log,因此您需要打开控制台才能查看有用的信息。
相关文章:
- 分派点击事件并保留击键修饰符
- 模糊事件的Javascript测试
- keyup事件处理程序更改焦点不适用于快速键入
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- 如何使Javascript动态html表及其上的事件
- 使用类从一个标记中双击事件
- 如何在未直接触发的情况下停止事件
- 更新淘汰视图模型属性时激发更改事件
- 点击淘汰赛中的事件
- 基于淘汰中的条件的动态事件处理程序
- Google Analytics(分析)在淘汰赛中推送跟踪事件.js数据绑定
- 在页面加载时调用的淘汰 JS 鼠标悬停事件
- 用于点击事件绑定的淘汰通道$parent
- 淘汰剑道数字文本框事件
- 淘汰订阅事件触发两次
- 为什么这两行 jquery 会淘汰另一个 jquery 元素的事件处理程序
- 点击事件在淘汰赛中不会绑定到秒中
- 我如何才能听一个选中的事件淘汰js
- 没有可观察的淘汰订阅/事件类型系统
- 当单击淘汰表行中的复选框时,tr click事件将覆盖复选框状态更改