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

How Do I Check For an Empty Object in a Meteor Template?

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

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

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

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

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

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

如果attribute2是一个对象,你可以使用Object.keys来检查长度

{{#with attribute1}}
    {{#if !!Object.keys(attribute2).length}}
        show some content
    {{/if}}
{{/with}}

我刚刚找到了一种注册模板助手并使用 jQuery.isEmpty 进行空值检查的方法:

Template.registerHelper("isEmpty", function (object) {
    return jQuery.isEmpty(object);
});

并在模板中使用它:

{{#unless isEmpty attribute2}}
    show some content
{{/unless}}

但是我发现这个解决方案有一个缺点,如果我想在 attribute2 中引用属性,我需要在 unless 块中添加 {{#with attribute2}}{{/with}}

您的原始代码不起作用的原因是您假设空对象在空格键中等同于 false。正如 Spacebars 文档中提到的 here,只有虚假的 Javascript 值(nullundefined0""false) 将被空格键视为错误。因此,需要像您接受的答案建议的那样使用 Meteor 辅助方法检查空对象。