4

jsBin 示例

这是我的小模型:

var stuff = [{
  there: 'blah',
  that: {
    one: 'bbb',
    two: 'ccc'
  }
}];

首先,对于下面的模板,我不明白为什么第一个{{@key}}不输出任何东西而第二个输出。

{{#each this}}
  {{@key}}
  {{#each that}}
    {{@key}}
  {{/each}}
{{/each}}

更重要的是,我正在尝试使用这个下一个模板和一个助手来检查一个值是一个对象还是一个字符串,然后遍历它并打印键,或者只打印出键。

{{#each this}}
  {{#if isObj this}}
    {{#each that}}
      {{@key}}
    {{/each}}
  {{else}}
    {{@key}}
  {{/if}}
{{/each}}

帮手:

Handlebars.registerHelper('isObj', function(thing) {
  return $.type(thing) === 'object';
});
4

1 回答 1

12

我可以回答的第一个,你应该使用{{@index}}而不是{{@key}}因为你迭代一个数组。我正在研究第二个。

A:

{{#each this}}
  key: {{@index}}
  {{#each that}}
    key1: {{@key}}
  {{/each}}
{{/each}}

对于 b 部分,您似乎必须注册一个新的辅助函数,就好像不能从另一个函数中获取返回一样。你是块助手将类似于(几乎从这里偷了这个):

Handlebars.registerHelper('ifObject', function(item, options) {
  if(typeof item === "object") {
    return options.fn(this);
  } else {
    return options.inverse(this);
  }
});

现在将您的模板更改为:

{{#each this}}
  {{#ifObject this}}
    {{#each that}}
      {{@key}}
    {{/each}}
  {{else}}
    {{@key}}
  {{/ifObject}}
{{/each}}

这是在 tryhandlebars.com 上工作并更新了您的 jsbin,希望对您有所帮助!

于 2013-11-14T22:58:51.183 回答