【问题标题】:How Do I Check For an Empty Object in a Meteor Template?如何检查 Meteor 模板中的空对象?
【发布时间】:2015-07-19 11:25:31
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

  • 如果你在 lodash 中使用流星,你可以做类似#if _.isEmpty(data["attribute2"]) #if data["attribute2"].length > 0

标签: javascript meteor spacebars meteor-helper


【解决方案1】:

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

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

并在模板中使用它:

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

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

【讨论】:

  • unless 块内添加{{#with attribute2}}{{/with}} 可能是一个缺点,但这是您可以在@987654327 内切换代码块上下文的唯一方法@ 代码块在同一模板中,除非您要将信息的内容显示在单独模板中定义的内部 {{#with}} 块内,然后将 attribute2 对象值传递给该模板以设置其数据上下文为attribute2,如下所示:{{#unless isEmpty attribute2}}{{> templateName attribute2}}{{/unless}}
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-13
      • 2018-12-21
      • 2015-06-09
      • 1970-01-01
      • 2015-11-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多