Meteor 更改管理面板中的用户角色

Meteor 更改管理面板中的用户角色,meteor,alanning-roles,Meteor,Alanning Roles,我正在创建一个管理面板,在使用alanning:roles时,我可以通过选择控件更改用户角色。我遇到的问题是无法获取与每个select控件关联的用户。我引用了关于使用Meteor创建管理面板的内容,但当我调用该方法以更改角色时,控制台返回以下错误: 原始问题:已解决 更改的代码来自: 要更改设置userId值的方式,请执行以下操作: } 现在,Roles.setUserRoles不工作,但参数具有值 console.logoptions.role返回正确的值和 console.logoption

我正在创建一个管理面板,在使用alanning:roles时,我可以通过选择控件更改用户角色。我遇到的问题是无法获取与每个select控件关联的用户。我引用了关于使用Meteor创建管理面板的内容,但当我调用该方法以更改角色时,控制台返回以下错误:

原始问题:已解决

更改的代码来自:

要更改设置userId值的方式,请执行以下操作:

}

现在,Roles.setUserRoles不工作,但参数具有值 console.logoptions.role返回正确的值和

console.logoptions.user返回:

客户端代码:

服务器代码:

用户主页模板

console.logoptions.user应该打印用户的_id,而不是jQuery对象。在change[name=userRole]事件中,替换let userId=$event.target.id;使用let userId=event.target.id

分配和检索值的更好方法如下所示:

HTML:

console.logoptions.user应该打印用户的_id,而不是jQuery对象。在change[name=userRole]事件中,替换let userId=$event.target.id;使用let userId=event.target.id

分配和检索值的更好方法如下所示:

HTML:


您能否在服务器上获取options.user?在将其传递给Roles.setUserRoles之前,尝试对其进行控制台日志记录。此外,如果您能向我们展示userHome模板html,也会很有帮助。我更新了设置用户值的方式,该用户值最初未定义,以便使用let userId=$event.target.id.val从事件中获取值;然后是user:userId,但是我仍然没有定义它的值@sudheerjamial,所以我确实通过调用select元素更改时的方法修复了原始问题,但是现在我意识到我的角色。setUserRoles不起作用。你能用最新的代码更新这个问题吗。ThanksUpdated代码和问题现在是event.target.id值返回一个对象,因此不是有效的param@sudheerjamiar您能在服务器上获取options.user吗?在将其传递给Roles.setUserRoles之前,尝试对其进行控制台日志记录。此外,如果您能向我们展示userHome模板html,也会很有帮助。我更新了设置用户值的方式,该用户值最初未定义,以便使用let userId=$event.target.id.val从事件中获取值;然后是user:userId,但是我仍然没有定义它的值@sudheerjamial,所以我确实通过调用select元素更改时的方法修复了原始问题,但是现在我意识到我的角色。setUserRoles不起作用。你能用最新的代码更新这个问题吗。ThanksUpdated代码和问题现在是event.target.id值返回一个对象,因此不是有效的param@SudheerJami
Error: Missing 'users' param
I20190218-14:59:27.319(-6)?     at Object._updateUserRoles (packages/alanning_roles.js:684:23)
I20190218-14:59:27.319(-6)?     at Object.setUserRoles (packages/alanning_roles.js:250:11)
I20190218-14:59:27.320(-6)?     at MethodInvocation.changeRole (server/main.js:88:13)`
Template.userHome.events({
    'click #confirmChanges': function (event) {

        let currentRole = $(event.target).find('option:selected').val();
        let userId = $(event.target.id).val();
        console.log(userId);
        if (window.confirm("Change User Roles?")) {
            Meteor.call("changeRole", {
                role: currentRole,
                user: userId
            })
            window.location.reload();
        }
    }
})
Template.userHome.events({
    'change [name="userRole"]': function (event) {

    let currentRole = $(event.target).find('option:selected').val();
    let userId = $(event.target.id);
    console.log(currentRole);
    if (window.confirm("Change User Roles?")) {
        Meteor.call("changeRole", {
            role: currentRole,
            user: userId
        })
        window.location.reload();
    }
}
I20190219-20:37:37.527(-6)? { length: 0,
I20190219-20:37:37.528(-6)?   prevObject: 
I20190219-20:37:37.529(-6)?    { length: 0,
I20190219-20:37:37.529(-6)?      prevObject: 
I20190219-20:37:37.529(-6)?       { length: 0,
I20190219-20:37:37.530(-6)?         prevObject: [Object],
I20190219-20:37:37.530(-6)?         context: [Object],
I20190219-20:37:37.531(-6)?         selector: '3FzfDhZWcGFg6ggTE' },
I20190219-20:37:37.531(-6)?      context: { location: [Object] } },
I20190219-20:37:37.532(-6)?   context: 
I20190219-20:37:37.532(-6)?    { location: 
I20190219-20:37:37.532(-6)?       { href: 'http://localhost:3000/userHome',
I20190219-20:37:37.533(-6)?         ancestorOrigins: {},
I20190219-20:37:37.533(-6)?         origin: 'http://localhost:3000',
I20190219-20:37:37.534(-6)?         protocol: 'http:',
I20190219-20:37:37.534(-6)?         host: 'localhost:3000',
I20190219-20:37:37.534(-6)?         hostname: 'localhost',
I20190219-20:37:37.534(-6)?         port: '3000',
I20190219-20:37:37.535(-6)?         pathname: '/userHome',
I20190219-20:37:37.535(-6)?         search: '',
I20190219-20:37:37.536(-6)?         hash: '' } } }
Template.userHome.events({
    'change [name="userRole"]': function (event) {

        let currentRole = $(event.target).find('option:selected').val();
        let userId = $(event.target.id);
        console.log(currentRole);
        if (window.confirm("Change User Roles?")) {
            Meteor.call("changeRole", {
                role: currentRole,
                user: userId
            })
            window.location.reload();
        }
    }
})
Meteor.methods({
  changeRole( options ) {
    console.log("Change User is Being Called");
    try {
      Roles.setUserRoles( options.user, [ options.role ] );
      console.log(options.role)
    } catch( exception ) {
      console.log(exception);
    }
  }
});
<div class="nav">
    <p class="welcomeUser">Welcome, {{#with userInfo}}{{profile.firstname}} {{profile.lastname}}{{/with}}</p>

    <button id="logout" class="universalButton">Log Out</button>


</div>
<div class="pageContent">



    {{#if userIsAdmin}}
    <div class="adminPanel">
        <table id="userTable">
            <caption>Admin Panel</caption>
            <tr>
                <th class="usertableHead">Username</th>
                <th class="usertableHead">Role</th>
            </tr>
            {{#each users}}
            <tr>
                <td class="usertableData">{{username}}</td>
                <td class="usertableData">
                    <div class="styled-select purple rounded">
                        <select id={{_id}} name="userRole">
                            <option value={{roles}}>{{roles}}</option>
                            <option value="Teacher">Teacher</option>
                        </select>
                    </div>
                </td>
            </tr>
            {{/each}}
        </table>
        <button id="confirmChanges" class="universalButton">Confirm Changes</button>
    </div>
    {{/if}}
</div>
...
  <select data-id={{_id}} name="userRole">
       <option value={{roles}}>{{roles}}</option>
       <option value="Teacher">Teacher</option>
  </select>
...
Template.userHome.events({
    'change [name="userRole"]': function (event) {
        let userId = event.target.dataset.id;
        let currentRole = event.target.value;
        console.log(userId, currentRole);
        ...
    }
})