使用此模板,我将显示存储在users-collection中的所有结果:
<template name="user">
{{#each users.roles}}
<input type="checkbox" data-role="{{this}}">{{this}}
{{/each}}
</template>
有一些角色被定义为&#34; admin&#34;,&#34; editor&#34;,&#34; user_manage&#34;。但这会导致一些问题:
1)如果一个用户只有角色&#34; admin&#34;,则只显示一个复选框。但我需要展示所有可能的角色。仅当角色位于配置文件中时,才应选中该复选框。
2)显示的角色描述应该更好[&b]。我的意思是结果应该是:
<input type="checkbox" data-role="admin"> Administrator
<input type="checkbox" data-role="editor"> Editor
<input type="checkbox" data-role="user_manage"> Manage users
我想我需要帮手:
Template.user.helpers({
var roles = {admin: 'Administrator', editor: 'Editor', user_manage: 'Manage users'};
return roles;
});
现在我想到迭代roles
中的所有元素并检查角色是否存在(=已检查)或不存在(=未选中)。元素的值用于显示复选框的标签。
1)这是正确的做法吗?
2)如何将帮助器var roles
连接到模板以进行检查?
答案 0 :(得分:0)
你基本上走在了正确的轨道上!您的助手需要返回一个对象数组而不是对象。然后你需要一个帮助器,它根据该角色是否在用户的角色数组中返回一个布尔值。例如:
JS:
Template.user.helpers({
roles: function(){
return [
{ label: 'admin', name: 'Administrator'},
{ label: 'editor', name: 'Editor'},
{ label: 'user_manage', name: 'Manage users'}
];
},
hasRole: function(role){
return Meteor.user().roles.indexOf(role)>-1; //assuming user.roles is just an array
}
});
HTML:
<template name="user">
{{#each roles}}
<input type="checkbox" data-role="{{this.label}}"
{{#if hasRole this.label}}checked{{/if}}>{{this.name}}
{{/each}}
</template>