0

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

我已经创建了我认为可行的方法(jsfiddle 示例),但是绑定到 an 的搜索结果表observableArray不会更新。

如果我从 中删除该data-bind属性,<div id="myDialog"/>则搜索结果表会正确更新。

此外,我只能通过将 JavaScript 放在正文中(框架选项no wrap (body))让 jsfiddle 示例重复相同的行为,即使在实际实现中的ready()回调期间加载了脚本。

我哪里错了?

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

更新:

似乎 Knockoutforeach绑定无法看到对observableArray. 我创建了自己的绑定(更新的 jsfiddle 示例)模板,它几乎可以满足我的要求,但不是很令人满意。

如何让foreach绑定识别集合何时更改?

4

2 回答 2

2

这是您的损坏示例,稍作修改即可.dialog()在 setTimeout 中调用:http: //jsfiddle.net/rniemeyer/YuV55/5/ko.applyBindingsjQuery UI 对话框功能将元素移动到页面底部,因此它可能会在初始传递第二次命中它时弄乱绑定。

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

于 2012-06-08T23:38:11.423 回答
0

经过大量测试后,我认为不可能在绑定到 viewmodel 的 jQuery UI 对话框中使用foreach绑定observableArray- 其他绑定,例如textobservable看起来工作正常的绑定。

这个损坏的示例使用了一个绑定到视图模型的对话框,该对话框基于我在此处找到的示例(我认为)。

这个示例完成了我想要的。然而,对话框并没有绑定到视图模型,而是我将一个单击处理程序连接到一个按钮以启动对话框(摘自这篇文章)。

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

于 2012-06-08T22:13:30.660 回答