我在我的项目中使用 knockout 和 jQuery.tmpl 框架,有时我只使用 jquery-tmpl 来生成这样的 HTML:
var html = $("#template").tmpl(data);
html.appendTo(destElement);
我不喜欢某处我有用于绑定(bind)的 knockout 模板和某处用于 html 生成和绑定(bind)的 jquery 模板。
我想知道 knockout 是否像 jquery tmpl 那样提供从模板生成 html 的能力。 如果是这样,我将完全删除 jquery-tmpl,因为在大多数情况下我只将它用于从模板生成 html。
请多多指教
最佳答案
AFAIK Knockout 不支持像 jQuery 模板那样将预编译模板存储为 JavaScript 变量。
因此,您在问题中给出的示例仅使用 Knockout 模板绑定(bind)是不可能的。绑定(bind)确实提供了一些 callbacks for post- and after-rendering ,但这并不完全相同,因为这些回调的输入是编译后的 DOM 元素,而不是对它的 JavaScript 引用。
在我们当前的项目中,我们使用 Handlebars作为我们的模板引擎,我选择它的两个主要原因:
- jQuery 模板已弃用,目前不存在官方插件,jQuery UI 团队不清楚他们何时/是否会在核心中包含模板。
- 借助 Handlebars,您可以将模板提取为单独的 .handlebars 文件,这些文件可以从命令行进行预编译。
我不使用 knockout 模板绑定(bind),我的所有模板都被提取到单独的文件并预编译为单独的 .js 文件。我所要做的就是包含已编译的 .js 文件,我可以将模板作为 JS 变量访问。
如果您选择 jQuery 模板并希望预编译您的模板,您要么必须将所有模板添加到一个 HTML 文件中并编写一些 JavaScript 以获取每个模板并将其转换为 JavaScript,要么您可以编写一个小节点应用程序,它接收您的模板,转换它们并再次输出它们。
关于knockout.js - 我可以使用 knockout 作为模板引擎吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11450906/