【问题标题】:return object value from helper (meteor)从助手(流星)返回对象值
【发布时间】:2019-02-10 11:50:37
【问题描述】:

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

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}}

但它没有产生任何结果。 但是如果我删除参数,它工作正常:

objectReturnHelper: function() {
   var obj1 = 5;
   var obj2 = 10;
   return {
        obj1: _.range(0, obj1),
        obj2: _.range(0, obj2)
    };
}


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

有什么见解吗?

【问题讨论】:

  • 它正在被使用。编辑了帖子并添加了相同的代码

标签: meteor each helper


【解决方案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,
    };
}

然后,您可以使用 else 在上下文错误时自动触发 with 捕获此回退:

{{#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}}

【讨论】:

    猜你喜欢
    • 2017-01-10
    • 2014-07-03
    • 2014-07-14
    • 2015-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多