【问题标题】:Meteor and #each scopingMeteor 和#each 作用域
【发布时间】:2015-08-13 22:33:21
【问题描述】:

我实际上正在使用 meteorjs 开发一个简单的应用程序,但我遇到了一个问题。

实际上,我有一个带有 #each 语句的模板,如下所示:

<template name="insidePlanning">
  <div class="row m-t">
    <div class="backGrey col-md-8">
      <div class="row">
        {{#each users}}
          <div class="col-md-{{countUsersCol}}">
            {{name}}
          </div>
        {{/each}}
      </div>

    </div>

    <div class=" col-md-4">
      <form>
        <div class="form-group">
          <input type="text" name="text" placeholder="Type to add new tasks" class="form-control" />
        </div>
      </form>

      <ul class="list-unstyled">
        {{#each taskNotAffected}}
          <li>{{title}}</li>
        {{/each}}
      </ul>
    </div>
  </div>
</template>

除了 {{countUsersCol}} 之外,一切正常...

这是我的模板助手:

  Template.insidePlanning.helpers({
    countUsersCol:function(){
      if(this.users){
        return Math.round(12/this.users.length);
      }
      return 0;
    }
  });

事实上,当我将 {{countUsersCol}} 放在 #each 语句中时,我总是得到 0。如果我把它放在 #each 的上方,它会显示 6(我实际需要的值。)。因此,总而言之,#each 在其语句中创建了不同的范围......

我尝试使用 {{../countUsersCol}} 但没有任何反应,我不知道该怎么做。

你能帮帮我吗?

【问题讨论】:

    标签: javascript meteor


    【解决方案1】:

    您的users#each 块的 数据上下文的一部分:在循环内,this 将仅包含您正在处理的当前单个user 文档中的内容上。您需要使用Template.parentData() 才能从帮助程序中获取上层数据。

      Template.insidePlanning.helpers({
        countUsersCol:function(){
          var parentData = Template.parentData(1);
          if(parentData.users){
            return Math.round(12/parentData.users.length);
          }
          return 0;
        }
      });
    

    【讨论】:

      【解决方案2】:

      通常,each 与光标一起使用,所以我假设您使用了它。你正在使用this.users.length,如果this.users 是一个游标,你不应该得到.length。你应该试试this.users.count()

      【讨论】:

      • 我试过了,还是不行。事实是我在#each 框之外有想要的结果。当我在我的函数中使用 console.log(this) 时,我有我的子元素,我无法访问父函数。
      • 也许你可以使用Template.instance().data
      【解决方案3】:

      因此,当您位于 each 块中时,this 关键字将引用您在 {{#each}} 块中迭代的对象之一。因此,让我们假设您的每个块的“用户”是一个帮助器,它返回您已子化到 return Meteor.users.find({}); 的用户列表。使用它,在 {{#each}} 块内返回一个用户文档,如:{name: "eric", occupation: "doctor"} 或任何您附属的内容。因此,为了获得 {{#each}} 块的每个用户的计数,您将需要一个计算所有记录的助手。一些简单的东西可能是:Template.myTemplate.helpers({ userCount: function() { return Meteor.users.find({}).count();} });

      【讨论】:

        猜你喜欢
        • 2012-09-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-09
        • 2016-11-13
        • 2018-03-25
        • 2015-12-18
        • 1970-01-01
        相关资源
        最近更新 更多