【问题标题】:Can I use knockout as template engine?我可以使用淘汰赛作为模板引擎吗?
【发布时间】:2012-07-12 03:33:48
【问题描述】:

我在我的项目中使用了敲除和 jQuery.tmpl 框架,有时我只使用 jquery-tmpl 来生成这样的 HTML:

var html = $("#template").tmpl(data);
html.appendTo(destElement);  

我不喜欢这样的地方,我有用于绑定的淘汰模板以及用于 html 生成和绑定的 jquery 模板。

我想知道敲除是否像 jquery tmpl 那样提供从模板生成 html 的能力。 如果是这样,我将完全删除 jquery-tmpl,因为在大多数情况下,我只将它用于从模板生成 html。

请指教

【问题讨论】:

    标签: knockout.js jquery-templates knockout-2.0


    【解决方案1】:

    AFAIK Knockout 不支持像 jQuery 模板那样将预编译模板存储为 JavaScript 变量。

    因此,您在问题中给出的示例仅使用 Knockout 模板绑定是不可能的。绑定确实提供了一些callbacks for post- and after-rendering,但这并不完全相同,因为这些回调的输入是编译的 DOM 元素而不是 JavaScript 对其的引用。

    在我们当前的项目中,我们使用Handlebars 作为我们的模板引擎,我选择它的两个主要原因:

    1. jQuery 模板已被弃用,目前不存在官方插件,jQuery UI 团队不清楚它们何时/是否将模板包含在核心中。
    2. 使用 Handlebars,您可以提取模板以分离 .handlebars 文件,这些文件可以从命令行预编译。

    我不使用敲除模板绑定,我所有的模板都被提取到单独的文件中,并被预编译为单独的 .js 文件。我所要做的就是包含已编译的 .js 文件,我可以将模板作为 JS 变量访问。

    如果您选择 jQuery 模板并希望预编译您的模板,您要么必须将所有模板添加到一个 HTML 文件并编写一些 JavaScript 来获取每个模板并将其转换为 JavaScript,要么您可以编写一个小节点应用程序,它接收您的模板、转换它们并再次输出它们。

    【讨论】:

    • 基本上我不需要预编译模板,我只需要一种方法来获得评估的 HTML。
    • “评估”是什么意思?如果你只是想将一些部分定义为模板,你可以将 jQuery 抛到脑后并使用 KO 的模板绑定,它的作用相同,你不需要显式地将其编译为 JS,所有将由绑定处理。跨度>
    • 似乎我在这个方法中找到了我需要的东西 ko.applyBindingsToNode(element, null, app.viewModel);但不完全。不同之处在于它将模板结果呈现给元素,但我需要结果作为对内存中 dom 节点的引用,正如我在问题中展示的那样
    • @Madman 恐怕 KO 不可能,我重新制定了我的答案,我认为我们混淆了预编译和将模板存储为 JS(内存)中的变量。它们实际上是同一回事
    • 我还没有找到解决方案,所以我将其标记为已回答,目前的状态是 - 不可能
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 2018-09-05
    • 2011-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-15
    相关资源
    最近更新 更多