【发布时间】:2013-01-02 21:05:27
【问题描述】:
如何手动使用预编译好的handlebars.js模板?
比方说,我们有
source = "<p>Hello, my name is {{name}}</p>"
data = { name: "Joe" }
目前,我有
template = Handlebars.compile(source)
render: -> template(data)
源来自数据库,为了减少编译时间,我想使用一个编译步骤,用Handlebars.precompile(source)预编译模板服务器端,然后使用类似的东西:
template = precompiled_template
render: -> precompiled_template(data)
precompiled_template 是一个带有函数定义的字符串,所以这不起作用。
另外,我找到了Hanlebars.compile(source)() == Handlebars.precompile(source),但是浏览了handlebars的源代码,是编译器和运行时,我仍然不知道如何实现。
【问题讨论】:
-
你看过handlebars_assets是如何工作的吗?那里可能有一堆 Rails 噪音,但也许它会提供一些洞察力。
-
感谢您的意见;我检查了它,但它提供了一个 Sprockets 引擎,它委托给其他东西,最后我也没有找到它。但是,我找到了答案,它使用了 eval 并且总体而言不是那么漂亮,但至少它可以工作并且似乎可以提高性能。
-
有点好奇,在这里,为什么两个答案都没有被标记为答案......丹尼尔似乎在他的答案中投入了很多工作,很高兴看到他因此获得奖励;当另一个用户(例如我自己)正在寻找一个实际上将其标记为已接受的答案时,它也会变得更容易。
-
@Steve 看到我对该答案的评论。基本上,我需要将编译后的模板存储在数据库中(并从那里检索它)并与之交互对我来说是困难的部分(也是问题)。丹尼尔的回答肯定很好,但我不能说它回答了我在回复中提到的问题。我相信这对于具有可定制模板的 SaaS 来说是一个有用的场景,所以我没有解决这个问题,希望有人可能有一个比从数据库中评估模板更好的解决方案。
标签: handlebars.js