1

我正在使用最新版本的 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 不包含在第二个版本中。

问题的根源是对话框及其内容所依赖的可观察对象在我第一次加载页面时没有设置。因此,模板绑定的属性不可用,从而导致错误。在淘汰赛之前包括 jquery-tmpl 可以解决问题,所以我假设淘汰赛模板引擎会在 jquery-tmpl 可用时改变它的行为。但是,我不想依赖已弃用的插件。

是否有更好的方法将 jquery UI 对话框及其内容绑定到 ViewModel?

4

1 回答 1

1

只需更改此:

<script id="newDialogTmpl" type="text/html">
    Add <span data-bind="text: displayName"></span>?
</script>
​

对此:

<script id="newDialogTmpl" type="text/html">
    <!-- ko if: $data -->
    Add <span data-bind="text: displayName"></span>?
    <!-- /ko -->
</script>

第一次你的newThing道具等于null所以它触发了引用错误。您应该检查是否$data不为空,如果为空则渲染模板 - 什么也不做

于 2012-07-17T21:12:31.723 回答