我正在使用最新版本的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)时才有效。我把我的问题简化为两个jsfiddles,一个工作版本(http://jsfiddle.net/LhEnV/29/)和一个破碎的版本(http://jsfiddle.net/gygh3/1/)。唯一的区别是jquery-tmpl.js不包含在第二个版本中。
问题的根源是当我第一次加载页面时,没有设置对话框及其内容所依赖的可观察对象。因此,模板绑定的属性不可用,这会导致错误。在敲除之前包括jquery-tmpl可以解决这个问题,所以我假设当jquery-tmpl可用时,淘汰模板引擎会改变它的行为。但是,我不想依赖已弃用的插件。
是否有更好的方法将jquery UI对话框及其内容绑定到ViewModel?
答案 0 :(得分: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
是否为空,然后渲染模板,如果为null - 什么都不做