如果对象或字段存在,流星 {{#if}} 助手
Meteor {{#if}} helper if object or field exists
我正在使用 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;
}
}
});`
您的 if
不在正确的位置。您的 objectTemplate
可能是这样称呼的:
{{#each datum in data}}
{{>objectTemplate data=data}}
{{/each}}
所以它总是被渲染。即使数据为空。 this
你检查你的助手将永远是真实的,它是模板本身。
所以,你应该这样称呼它:
{{#each datum in data}}
{{#if datum.thingToTest}}
{{>objectTemplate datum=datum}}
{{/if}}
{{/each}}
不会调用整个子模板。
您可以使用 _.has(object, key)
if you want to check if the object document.[0].object
has the property object1
set. The function _.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>
我正在使用 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;
}
}
});`
您的 if
不在正确的位置。您的 objectTemplate
可能是这样称呼的:
{{#each datum in data}}
{{>objectTemplate data=data}}
{{/each}}
所以它总是被渲染。即使数据为空。 this
你检查你的助手将永远是真实的,它是模板本身。
所以,你应该这样称呼它:
{{#each datum in data}}
{{#if datum.thingToTest}}
{{>objectTemplate datum=datum}}
{{/if}}
{{/each}}
不会调用整个子模板。
您可以使用 _.has(object, key)
if you want to check if the object document.[0].object
has the property object1
set. The function _.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>