我实际上正在使用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}}但没有任何反应,我不知道该怎么做。
你能帮我一点吗?
答案 0 :(得分:2)
您的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;
}
});
答案 1 :(得分:0)
通常,each
与光标一起使用,所以我假设你使用了它。您使用的是this.users.length
,如果this.users
是游标,则不应该获得.length
。您应该尝试this.users.count()
。
答案 2 :(得分:0)
因此,当您在每个块内时,this
关键字将引用您在{{#each}}
块中迭代的其中一个对象。因此,假设您的每个块的“用户”是一个帮助程序,它返回您已经转贴到return Meteor.users.find({});
的用户列表。使用此功能,在{{#each}}
块中返回一个用户文档,例如:{name: "eric", occupation: "doctor"}
或您提交的任何内容。因此,为了获得您为{{#each}}
块分配的每个用户的计数,您将需要一个对所有记录进行计数的帮助程序。简单化的东西可能是:Template.myTemplate.helpers({ userCount: function() { return Meteor.users.find({}).count();} });