2015-09-16 88 views
0

我使用alanning模板设置复选框:角色检查角色:流星:设置帮手

helper.js

Template.user.helpers({ 
    var loggedInUser = Meteor.user() 
    var admin = (Roles.userIsInRole(loggedInUser, ['admin'])) ? true : false, 
     editor = (Roles.userIsInRole(loggedInUser, ['admin'])) ? true : false; 
    var roles = { admin: admin, editor: editor }; 
    return roles; 
}); 

模板

<template name="user"> 
    <form> 
     <input type="checkbox" name="admin"> Admin 
     <input type="checkbox" name="editor"> Admin 
    </form> 
</template> 

如何如果管理员或编辑者是真的,我会设置复选框来检查吗? 还是有更好的方法来设置复选框选中?

+0

首先,你应该再次检查助手是如何制造 – Sindis

回答

2

一般情况下,你要初始化你的模板的状态在其onRendered回调是这样的:

Template.user.onRendered(function() { 
    var userId = Meteor.userId(); 
    $('input[name=admin]').prop('checked', Roles.userIsInRole(userId, ['admin'])); 
    $('input[name=editor]').prop('checked', Roles.userIsInRole(userId, ['editor'])); 
}); 

注意,根据docsuserIsInRole有一个id(不是对象)。

如果你有多个角色来检查,你可以在它们之间迭代,像这样:

Template.user.onRendered(function() { 
    var userId = Meteor.userId(); 
    var roles = ['admin', 'editor']; 
    _.each(roles, function(role) { 
    $("input[name=" + role + "]").prop('checked', Roles.userIsInRole(userId, [role])); 
    }); 
}); 
+0

我会用一个字段列表,并遍历这个。那我就不需要这个数组了 – user3142695

0

您可以相应地设置他们在页面加载到这样的用户角色:

Template.users.rendered = function() { 
    var self = this; 
    var loggedInUser = Meteor.userId(); 
    var admin = (Roles.userIsInRole(loggedInUser, ['admin'])), 
     editor = (Roles.userIsInRole(loggedInUser, ['editor'])); 
    //set the checkboxes correct values 
    $(self.find("#admin")).prop('checked', admin); 
    $(self.find("#editor")).prop('checked', editor); 
}; 

如果你需要被动地设置您的复选框的状态,这里是你如何进行:

HTML

<template name="user"> 
    <form> 
     <input type="checkbox" name="admin" {{getValueForChecked "admin"}}> Admin 
     <input type="checkbox" name="editor" {{getValueForChecked "editor"}}> Editor 
    </form> 
</template> 

JAVASCRIPT

Template.user.helpers({ 
    "getValueForChecked": function(value){ 
    var loggedInUser = Meteor.userId(); 
    var credentials= (Roles.userIsInRole(loggedInUser, [value])); 
    return credentials? "checked" : "" 
    } , 
    //or alternatively you can use one helper per field 
    "isAdmin": function(){ 
    var loggedInUser = Meteor.userId(); 
    var admin = (Roles.userIsInRole(loggedInUser, ['admin'])); 
    return admin ? "checked" : "" 
    }, 
    "isEditor": function(){ 
    var loggedInUser = Meteor.userId(); 
    var editor = (Roles.userIsInRole(loggedInUser, ['editor'])); 
    return editor? "checked" : "" 
    } 
});