从助手(流星)返回对象值

时间:2018-09-05 10:50:47

标签: meteor each helper

我有一个辅助函数,该函数接受一个参数并返回一个对象。

getDeletedObjects()

现在,我想单独访问对象的值。这就是我试图做的事情:

objectReturnHelper: function(param1) {
   var obj1 = collectionName.findOne(param1).count1;
   var obj2 = collectionName.findOne(param1).count2;;
   return {
        obj1: _.range(0, obj1),
        obj2: _.range(0, obj2)
    };
}

但是没有结果。 但是,如果我删除该参数,它将正常工作:

{{#each objectReturnHelper id obj1}}
        <p>TEST</p>
{{/each}}

有什么见解吗?

1 个答案:

答案 0 :(得分:1)

为了更好地反映对象的结构,可以使用#with正确地access object context。在这种情况下,您可以使用#each

在给定范围内为每个项目创建一个范围
{{#with objectReturnHelper id}}
  {{#each this.obj1}}
    <p>Test (1)</p>
  {{/each}}
  {{#each this.obj2}}
    <p>Test (2)</p>
  {{/each}}
{{/with}}

如果您的助手产生了意想不到的结果,那么您可以进行无创的后退,这会很好:

objectReturnHelper: function(param1) {
   var query = collectionName.findOne(param1)
   if (!query) return null

   var obj1 = query.count1;
   var obj2 = query.count2;

   return {
        obj1: obj1 >= 0 ? _.range(0, obj1) : null,
        obj2: obj1 >= 0 ? _.range(0, obj2) : null,
    };
}

然后您可以使用withelse内捕获此后备情况,该情况会在上下文为false时自动触发:

{{#with objectReturnHelper id}}
  {{#each this.obj1}}
    <p>Test (1)</p>
  {{/each}}
  {{#each this.obj2}}
    <p>Test (2)</p>
  {{/each}}
{{else}}
  <p>No data found</p>
{{/with}}

您当然可以将其配置为其他后备方式,其中else陷入each块内:

{{#with objectReturnHelper id}}
  {{#each this.obj1}}
    <p>Test (1)</p>
  {{else}}
    <p>No data found</p>
  {{/each}}
  {{#each this.obj2}}
    <p>Test (2)</p>
  {{else}}
    <p>No data found</p>
  {{/each}}
{{/with}}