在jQuery UI对话框中,observableArray绑定表不会更新

我正在尝试创建一个带有按钮的页面,当单击该按钮时,会打开一个模式对话框,允许用户搜索产品并将选定的搜索结果添加到订单中。

我已经创建了我认为可以工作的东西( jsfiddle示例 ),但是绑定到observableArray的搜索结果表不会更新。

如果我从

删除data-bind属性,则搜索结果表会正确更新。

此外,我只能通过将JavaScript放在正文(框架选项无包装(正文) )中来获取jsfiddle样本以重复相同的行为,即使脚本在实际实现中的ready()回调期间加载。

我哪里错了?

(我在这里发布了所有代码。)

更新:

似乎Knockout foreach绑定无法看到observableArray的更新。 我已经创建了自己的绑定( 更新的jsfiddle示例 )模板,几乎可以满足我的需求,但效果不是很理想。

如何让foreach绑定识别集合何时发生变化?

这是您的破坏样本,稍作修改,在setTimeout中调用.dialog() : http : //jsfiddle.net/rniemeyer/YuV55/5/ 。 jQuery UI对话框function将元素移动到页面底部,因此当ko.applyBindings的初始传递第二次击中它时,它会搞乱绑定。

这是另一个调用特定于容器元素的ko.applyBindings示例(没有setTimeout): http : //jsfiddle.net/rniemeyer/YuV55/6/ 。 这意味着ko.applyBindings不会第二次点击移动的对话框,因为它将在容器元素之外。

经过大量测试后,我认为在绑定到viewmodel的jQuery UI对话框中使用绑定到observableArrayforeach是不可能的 – 绑定到observableArray其他绑定(例如text似乎工作正常。

这个破碎的样本使用绑定到viewmodel的对话框,我基于这里找到的样本(我认为)。

这个样本完成了我想要的。 但是,该对话框未绑定到viewmodel,而是将单击处理程序连接到按钮以启动对话框(取自本文 )。

这很好用,我对结果很满意。