如果对象或字段存在,Meteor {{#if}}帮助程序

时间:2015-12-25 21:22:32

标签: meteor meteor-blaze

我使用Blaze空格键循环浏览模板中的文档以创建列表

<template name="objectTemplate">
   {{#if checkIfObjectExists}}
   ({{document.[0].object.object1}})
   {{/if}}
</template>

我知道在某些文档中,某个对象在该对象位置不存在。通常,如果我没有(),它将是空白的,我可以继续前进,但在这种情况下,当空,我会有很多()这是不好的。

我创建了一个帮助器,但它不起作用。我尝试过null,0,typeOf等,但仍然无法正确使用它。无论如何这里是帮手

Template.objectTemplate.helper ({ 
checkIfObjectExists: function() { 
 if (this !== 'null') {
  return true;
  } else {
    return false;
  }
}
});`

2 个答案:

答案 0 :(得分:0)

您的if不在正确的位置。您的objectTemplate可能就是这样称呼的:

{{#each datum in data}}
    {{>objectTemplate data=data}}
{{/each}}

所以它总是呈现。即使数据是空的。您在帮助程序中检查的this将始终为真,它本身就是模板。

所以,你应该这样称呼它:

{{#each datum in data}}
    {{#if datum.thingToTest}}
        {{>objectTemplate datum=datum}}
    {{/if}}
{{/each}}

不会调用整个子模板。

答案 1 :(得分:0)

如果要检查对象document.[0].object是否设置了属性object1,则可以使用 _.has(object, key) 。函数 _.isObject(value) 会检查document.[0].object.object1是否为Object(这还包括数组)。

因此,根据您的要求,您的模板助手应如下所示:

Template.objectTemplate.helper({
    checkIfObjectPropertyExists: function() {
        return _.has(this.document[0].object, "object1");
    },
    checkIfPropertyIsObject: function() {
        return _.isObject(this.document.[0].object.object1);
    }
});

您还可以注册Underscore.js全局模板助手,然后直接在Meteor模板中使用它:

Template.registerHelper('_', function () {
    return _;
}); 
<template name="objectTemplate">
   {{#if _.has this.document.[0].object 'object1'}}
      ({{document.[0].object.object1}})
   {{/if}}
</template>