【发布时间】:2012-07-16 20:20:34
【问题描述】:
我正在使用最新版本的 knockout.js 和 jquery。我正在尝试创建一个 jquery 对话框,只要特定的 ko.observable 具有值,该对话框就会打开和关闭。我的实现基于这个 jsfiddle 中的代码 http://jsfiddle.net/rniemeyer/WpnTU/,我在这个 Knockout.js 论坛 https://groups.google.com/d/msg/knockoutjs/XIaQMNHjy7Q/BpfDU5inKVQJ 中找到了它。
但是,这种方法只有在我包含现已弃用的 jquery-tmpl.js 插件(版本 1.0.0pre)时才有效。我将我的问题提炼为两个 jsfiddle,一个工作版本 (http://jsfiddle.net/LhEnV/29/) 和一个损坏的版本 (http://jsfiddle.net/gygh3/1/)。唯一的区别是 jquery-tmpl.js 不包含在第二个版本中。
问题的根源在于,当我第一次加载页面时,对话框及其内容所依赖的 observable 没有设置。因此,模板绑定的属性不可用,从而导致错误。在淘汰赛之前包括 jquery-tmpl 可以解决问题,所以我假设淘汰赛模板引擎会在 jquery-tmpl 可用时改变它的行为。但是,我不想依赖已弃用的插件。
有没有更好的方法将 jquery UI 对话框及其内容绑定到 ViewModel?
【问题讨论】:
-
您是否尝试过显式订阅 observables 更改,因此您将显示/隐藏对话框的代码放在“订阅”函数中? knockoutjs.com/documentation/observables.html 请参阅“显式订阅 observables”部分。
-
没有。我想将我的 DOM 操作代码保留在自定义绑定中,因为这似乎是淘汰赛的最佳实践。 Serjio 的回答正是我所缺少的。
标签: javascript jquery jquery-ui knockout.js