Meteor - 复选框保持旧值

时间:2016-03-13 13:25:50

标签: meteor checkbox underscore.js meteor-blaze meteor-helper

我是Meteor的新手:)

我有一个模板助手:

    userRoleMap: function() {
        var u = getUser();
        if (u) {
            var lstRoles = Meteor.roles.find({}).fetch();
            var userRoles = u.roles ? u.roles : [];

            _.map(lstRoles, function(r) {
                _.extend(r, {
                    userMapped: _.contains(userRoles, r.name)
                });
                return r;
            });

            return lstRoles;
        }

        return [];
   }

我在我的模板中使用这个助手:

{{#each userRoleMap}}
   <div class="checkbox">
     <label>
        <input type="checkbox" class="chkUserRole" value="{{name}}" checked="{{userMapped}}"> {{name}}
     </label>
   </div>
{{/each}}

我在bootstrap-modal中显示上面的html / template。我在点击一个按钮时显示这个模态(并在调用getUser()函数时在我正在使用的Session中设置user-id)。

问题是复选框检查状态没有根据&#34; userMapped&#34;的值而改变。它是第一次正确设置,但之后没有。每次打开模态时都会调用帮助器userRoleMap,但复选框具有与之前打开时相同的检查状态(手动检查/取消检查得到维护)。

helper方法的返回值按预期工作(通过在控制台上记录验证)。

我在这里缺少什么?与_.extend()有关吗?

1 个答案:

答案 0 :(得分:0)

Meteor执行此操作的方法是将check作为元素属性返回:

Template.registerHelper( 'checked', ( a, b ) => {
  return a === b ? 'checked' : '';
});

{{#each userRoleMap}}
   <div class="checkbox">
     <label>
        <input type="checkbox" class="chkUserRole" value="{{name}}" {{checked userMapped true}}> {{name}}
     </label>
   </div>
{{/each}}