Hogan 不支持预编译模式下的 lambda



我有一个胡子模板,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);
    };
});

我使用木偶渲染模板。ItemView将lambda函数传递给Backbone。像这样的模型:

myfunc: function (key) { console.log("key", key); }

奇怪的事情:函数myfunc将被调用并记录到控制台,但它没有被模板传递一个键。我读到Hogan在预编译模式下不支持Lambda(大约一年前-我猜这是固定的)-但如果是这样,它是如何发生的,myfunc被调用?

我在我的vendor/hogan.js库中进行了一些调试-看起来hogan无法看到lambda-tags之间的值(这里: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

我的解决方案是用必要的对象字段替换lambdas。我的意思是在渲染前准备好所有必要的信息。

相关内容

  • 没有找到相关文章

最新更新