如何检查流星模板中的空对象?

时间:2015-05-08 13:54:48

标签: javascript meteor spacebars meteor-helper

我有一个像这样的模板数据上下文:

data = {
    "attribute1": {
        "attribute2": {}
    }
}

在流星模板中我正在做这样的事情:

{{#with attribute1}}
    {{#if attribute2}}
        show some content
    {{/if}}
{{/with}}

如果attribute2是一个空对象,我不想显示任何内容。但是我尝试了{{#with attribute2}}{{/with}}{{#if attribute2}}{{/if}}并且它仍然在内部呈现内容,即使它是一个空对象。

在空格键模板中检查对象是否为空的正确方法是什么?或者甚至可能吗?

3 个答案:

答案 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值(nullundefined0""false)将是Spacebars认为是假的。因此,需要使用Meteor辅助方法检查空对象,如接受的答案所示。