淘汰赛,通过自定义绑定修改时未观察到可观察数组

Posted

技术标签:

【中文标题】淘汰赛,通过自定义绑定修改时未观察到可观察数组【英文标题】:knockoutjs, observable array not observed when modified through a custom binding 【发布时间】:2011-12-20 19:59:54 【问题描述】:

我有一个自定义绑定,它在 init 上创建事件处理程序。在这些事件处理程序中,我调用了我的视图模型的一个函数,该函数更新了我的视图模型属性之一(这是一个可观察的数组)。

但是绑定到该属性的 DOM 元素不会更新。

此外,如果我通过直接调用视图模型的方法来更改视图模型属性,则 DOM 元素会正确更新。此外,如果之前使用第一种方法更改了属性,现在视图模型属性包含所有正确信息。

对不起,如果不清楚,这里是测试它的小提琴:http://jsfiddle.net/8RTjN/67/ 运行时,选择一行(viewmodel 已更新但绑定未更新),然后单击添加按钮(直接修改 viewmodel 属性),现在绑定已正确更新。

那么:我做错了什么?

【问题讨论】:

【参考方案1】:

当您推送到selectedRequests 时,您当前拥有

this.selectedRequests().push(request);

你不需要 ()

this.selectedRequests.push(request);

【讨论】:

啊啊啊,现在可以了!非常感谢!如果我理解正确,那是因为它是实现该 push 方法的 observable 数组(然后传播到其他绑定)。而当使用 property().push 时,它是 javascript 数组的 push 函数(并且不会传播)。对吗? 是的,这是正确的,通过放入 () 您正在评估基本数组并跳过绑定。

以上是关于淘汰赛,通过自定义绑定修改时未观察到可观察数组的主要内容,如果未能解决你的问题,请参考以下文章

淘汰赛将选择绑定到动态可观察数组

刷新 WPF Datagrid 未绑定到可观察集合?

knockoutjs 可观察对象绑定的可观察数组

绑定到可观察属性,但显示不可观察的子属性

为啥我的 ListView 数据绑定到可观察集合不能正确显示

Ionic 4 Angular模板与异步管道绑定到可观察