我使用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;
}
}
});`
答案 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>