我有一个像这样的模板数据上下文:
data = {
"attribute1": {
"attribute2": {}
}
}
在流星模板中我正在做这样的事情:
{{#with attribute1}}
{{#if attribute2}}
show some content
{{/if}}
{{/with}}
如果attribute2是一个空对象,我不想显示任何内容。但是我尝试了{{#with attribute2}}{{/with}}
和{{#if attribute2}}{{/if}}
并且它仍然在内部呈现内容,即使它是一个空对象。
在空格键模板中检查对象是否为空的正确方法是什么?或者甚至可能吗?
答案 0 :(得分:1)
我刚刚找到了一种注册模板助手的方法,并使用jQuery.isEmpty进行空检查:
Template.registerHelper("isEmpty", function (object) {
return jQuery.isEmpty(object);
});
并在模板中使用它:
{{#unless isEmpty attribute2}}
show some content
{{/unless}}
但是我发现这个解决方案有一个缺点,如果我想引用attribute2中的属性,我需要在除非块中添加{{#with attribute2}}{{/with}}
答案 1 :(得分:0)
如果attribute2
是对象,则可以使用Object.keys
来检查长度
{{#with attribute1}}
{{#if !!Object.keys(attribute2).length}}
show some content
{{/if}}
{{/with}}
答案 2 :(得分:0)
原始代码不起作用的原因是因为您假设Space对象中的空对象等于false。正如Spacebars文档中提到的here,只有虚假的Javascript值(null
,undefined
,0
,""
和false
)将是Spacebars认为是假的。因此,需要使用Meteor辅助方法检查空对象,如接受的答案所示。