繁体   English   中英

如何检查值是否是Handlebars中的对象?

[英]How to check if value is an object in Handlebars?

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';
});

我可以回答第一个问题,你应该使用{{@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 ,希望它有所帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM