从淘汰赛2.3更新到3.2时,嵌套模板失败

时间:2014-10-07 10:29:49

标签: javascript templates knockout.js

我有一个使用knockout 2.3.0和嵌套模板的页面工作正常,直到我将它更新到3.2.0版本。

如果我剥离页面的其余部分,失败的结构如下所示:

...
<!-- ko template: {name: 'meta-data-template', foreach: DocumentMetaDataList} -->
<!-- /ko -->
...

<script type="text/html" id="meta-data-template">
  <label data-bind="text: FieldName() + ':', visible: $root.labelIsVisible($data)"></label>
  <!-- ko template: { name: $root.displayAddFieldTemplate, data: $data } -->
  <!-- /ko -->
</script>**

在这种情况下,displayAddFieldTemplate会解析为"meta-add-template",看起来像这样

<script type="text/html" id="meta-add-template">
  <a class="add-fieldvalue" href="#" data-bind="visible: $root.fieldValueIsVisible($data)">Link</a>
</script>  

我已经硬编码$root.fieldValueIsVisible($data)以返回true,因此应始终显示链接。但是,当我在浏览器中运行它时,会出现以下javascript错误:

Uncaught TypeError: Unable to process binding "template: function (){return { name:$root.displayAddFieldTemplate,data:$data} }"

消息:undefined不是函数

如果我从meta-add-template删除了数据绑定,那么它看起来像是按预期工作。

<script type="text/html" id="meta-add-template">
  <a class="add-fieldvalue" href="#">Link</a>
</script>  

即使我将值内联到data-bind,它也会给出相同的错误消息。所以这个模板也失败了:

<script type="text/html" id="meta-add-template">
  <a class="add-fieldvalue" data-bind="visible:true" href="#">Link</a>
</script>  

为什么这不能按预期工作,为什么在从2.3更新到3.2之后它会停止工作?

1 个答案:

答案 0 :(得分:1)

您使用的是旧版本的jquery模板吗?该库已被弃用。尝试删除对它的引用,因为knockoutjs现在支持相同的语法。

jQuery Templates are deprecated?

http://knockoutjs.com/documentation/template-binding.html