2011-11-28 44 views

回答

21

一对夫妇的事情,应该帮助清理这件事:

  • 如果Knockout.js之前引用jquery.tmpl.js,然后KO将设置jQueryTmplTemplateEngine为默认值。
  • jQueryTmplTemplateEngine不支持匿名模板。这意味着您不能在其中使用控制流绑定,如foreach,if,ifnotwith。您仍然可以使用模板绑定(包括嵌套模板)。
  • 您可以通过调用ko.setTemplateEngine()来控制默认模板引擎。您可以传递您想要使用的引擎实例,如ko.setTemplateEngine(new ko.nativeTemplateEngine)
  • 您也可以将模板引擎传递给templateEngine参数中的模板绑定。

因此,对于您的情况,您可能希望删除对jquery.tmpl.js的引用,以便默认使用本机模板引擎。本地模板引擎确实支持嵌套模板(匿名或命名)。显示使用本地模板引擎与它内部的匿名模板命名模板

快速样品:http://jsfiddle.net/rniemeyer/GXFYB/

+0

+1 - 比我更好的答案!但是,公平地说,新的淘汰模板引擎存在限制/向后兼容性问题。例如,您的拖放示例(http://www.knockmeout.net/2011/05/dragging-dropping-and-sorting-with.html)是否会与新引擎一起工作,因为它依赖于在模板中传递参数数据绑定? –

+0

是的,有一些变化是必要的。从帖子中拖放使用'tmplItem'这是一个jQuery模板的概念,但可以轻松替换。它也使用'templateOptions',这在本地模板中不是当前支持的。我将着眼于使用新语法创建更新的示例,并查看是否可以找到方法进一步清理它。 –

+0

我可能会发布这个或添加一个注释到博客文章,但这里是1.3中的两个示例:http://jsfiddle.net/rniemeyer/JEe2x/和http://jsfiddle.net/rniemeyer/HzNuS/ 。我把它们清理了一些,然后包装了模板绑定,以尽可能简单地添加绑定。 –

0

当我删除了包括到我得到这个问题的TMPL JS库,但重新添加它固定的问题。你确定你已经包含jquery.tmpl.js库吗?

<script src='..<some path>../jquery.tmpl.js")' type="text/javascript"></script> 

此外,我包括第一个tmpl库和第二个淘汰赛库。也许这是一个因素?