我有一个带有lambda的 mustache 模板,如下所示:

{{#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库中进行了一些调试-看起来hogan无法看到lambda标签之间的值(此处为myvalue)。

有人看过吗?

最佳答案

我的调查:
仅在使用grunt插件(例如grunt-hogan或grunt-templates-hogan)时才会出现此问题。
如果在使用Hogan.compile()在脚本中内联呈现之前编译模板,则可以解决此问题。

我在github上创建了一个小项目,因为jsfiddle不允许使用grunt并将其链接到https://github.com/twitter/hogan.js/issues/225

项目:https://github.com/ssuvorov/hogan-issue

我的解决方案是用必要的对象字段替换lambda。我的意思是在渲染之前准备包含所有必要信息的数据。

10-08 06:22