以编程方式呈现Blaze模板会丢失上下文/范围

时间:2015-11-24 19:37:52

标签: javascript meteor meteor-blaze

假设我已经定义了以下模板和帮助器:

var template = Template.fromString('{{#each people}}{{name}} {{/each}}');
var helpers = {
  people: function() {
    return [
      {name: 'Tim'},
      {name: 'Mary'},
      {name: 'John'}
    ];
  },
  fun: function(s) {
    return '[' + s + ']';
  }
};

(我正在使用numtel:template-from-string从字符串生成模板。)

以下代码有效:

Blaze.toHTMLWithData(template, helpers); // returns "Tim Mary John "

而且,这也有效:

template = Template.fromString('{{fun "Test"}}');
Blaze.toHTMLWithData(template, helpers);  // returns "[Test]"

但是,这不能按预期工作。我希望它返回"[Tim] [Mary] [John] ",但它会产生错误:

var template = Template.fromString('{{#each people}}{{fun name}} {{/each}}');
Blaze.toHTMLWithData(template, helpers);

我明白了:

Uncaught Error: No such function: fun(…)

我基本上只需要将助手和数据传递到所有在这里获得evaluta的子范围和上下文。

我不需要让它与Blaze.toHTMLWithData一起使用,我可以使用更长的解决方案来递归评估部分等。

我只需要让它发挥作用。有任何想法吗?

0 个答案:

没有答案