我有一个带有lambda的小胡子模板,如下所示:
{{#myfunc}}myvalue{{/myfunc}}
hogan.js预编译看起来像这样:
define(['hogan'],
function (Hogan) {
var template = new Hogan.Template(function (c, p, i) {
var _ = this;
_.b(i = i || "");
if (_.s(_.f("myfunc", c, p, 1), c, p, 0, 11, 18, "{{ }}")) {
_.rs(c, p, function (c, p, _) {
_.b("myvalue");
});
c.pop();
}
return _.fl();;
});
return function (context, partial, indent) {
return template.render(context, partial, indent);
};
});
我使用Marionette.ItemView渲染模板,将lambda函数传递给Backbone.Model,如下所示:
myfunc: function (key) { console.log("key", key); }
奇怪的是:函数myfunc将被调用并登录到控制台,但模板没有传递密钥。 我读到Hogan在预编译模式下不支持Lambda(大约一年前 - 我想这是固定的) - 但如果是这样的话,那myfunc会被调用吗?
我在我的vendor / hogan.js lib中添加了一些调试 - 看起来hogan看不到lambda-tags之间的值(这里:myvalue)。
之前有人见过这个吗?
答案 0 :(得分:1)
我的调查:
只有在使用grunt-hogan或grunt-templates-hogan这样的grunt插件时才会出现问题。
如果在使用Hogan.compile()
的脚本内联渲染之前编译模板,问题就解决了。
我在github上创建了一个小项目,因为jsfiddle不允许使用grunt并将其链接到问题https://github.com/twitter/hogan.js/issues/225。
项目:https://github.com/ssuvorov/hogan-issue
我的解决方案是用必要的对象字段替换lambdas。我的意思是在渲染之前准备包含所有必要信息的数据。