У меня есть шаблон усов с лямбдой, который выглядит так:
{{#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, передавая лямбда-функцию в Backbone.Model следующим образом:
myfunc: function (key) { console.log("key", key); }
Странная вещь: функция myfunc будет вызываться и записываться в консоль, но шаблон не передает ей ключ. Я читал о том, что Hogan не поддерживает Lambda в предварительно скомпилированном режиме (около года назад - я думаю, это исправлено) - но если да, то как это происходит, что myfunc вообще вызывается?
Я внес некоторую отладку в свою библиотеку vendor/hogan.js — похоже, что hogan не может видеть значение между лямбда-тегами (здесь: myvalue).
Кто-нибудь видел это раньше?