在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对话框中使用绑定到observableArray
的foreach
是不可能的 – 绑定到observableArray
其他绑定(例如text
似乎工作正常。
这个破碎的样本使用绑定到viewmodel的对话框,我基于这里找到的样本(我认为)。
这个样本完成了我想要的。 但是,该对话框未绑定到viewmodel,而是将单击处理程序连接到按钮以启动对话框(取自本文 )。
这很好用,我对结果很满意。