我是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()有关吗?
答案 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}}