Meteor:迭代用户角色以显示复选框

时间:2015-09-16 10:57:47

标签: javascript meteor

使用此模板,我将显示存储在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连接到模板以进行检查?

1 个答案:

答案 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>