首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在多到多的关系中使用复选框?

如何在多到多的关系中使用复选框?
EN

Stack Overflow用户
提问于 2015-02-20 11:35:22
回答 1查看 186关注 0票数 2

我有两个模特儿(角色,许可),有着多到多的关系。有一个权限列表,角色可以有一些权限和角色。我想要为角色创建编辑页面,并将权限添加为复选框列表。

编辑模板:

代码语言:javascript
复制
<form>
    {{input type="text" placeholder="role name" value=name}}
    <br />
    {{#each permissions_list}}
        <label>
            {{input type="checkbox" name="permissions[]"}}{{name}}
        </label><br />
    {{/each}}
    <button {{action 'save'}}>Edit</button>
</form>

模型:

代码语言:javascript
复制
    var Role = DS.Model.extend({
        agents: DS.hasMany('agent', {async: false}),
        name: DS.attr('string'),
        permissions: DS.hasMany('permission', {async: true})
    });

    var Permission = DS.Model.extend({
        type: DS.attr('string'),
        name: DS.attr('string'),
        roles: DS.hasMany('permission', {async: false})
    });

编辑角色控制器

代码语言:javascript
复制
    export default Ember.ObjectController.extend({
        permissions_list: [],
        actions: {
            save: function() {
                return this.get('model').save();
            }
        },
        load_permissions: function() {
            this.set('permissions_list', this.store.find('permission'));
        }.on('init')
    });

问题:

  1. 如果该权限已在model.permissions中,则无法找到如何将复选框标记为已选中
  2. 我无法保存角色保存的权限。控制器在编辑角色控制器中看不到“权限”数据(this.get(“权限”))

权限-权限列表,该角色包含

permissions_list -数据库中所有权限的列表

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-20 18:16:07

最简单的方法(IMHO)是为复选框创建一个组件:

代码语言:javascript
复制
App.PermissionCheckboxComponent = Ember.Component.extend({
  tagName: '',
  checked: function(){
    var permission = this.get('permission.name');
    var rolePermissions = this.get('role.permissions').mapBy('name');

    return rolePermissions.contains(permission);    
  }.property(),

  save: function(){
    var permissionChecked = this.get('checked');
    var role = this.get('role');
    var permission = this.get('permission');
    var permissions = role.get('permissions');

    if(permissionChecked){
      role.get('permissions').addObject(permission);
      permission.save();
      role.save();
    }
    else {
      role.get('permissions').removeObject(permission);
      role.save();
    } 
  }.observes('checked')    
});

组件模板如下所示:

代码语言:javascript
复制
<script type="text/x-handlebars" id="components/permission-checkbox">
  {{ input type='checkbox' checked=checked }} {{permission.name}}
</script>

然后,您可以在编辑模板中使用此组件,如下所示:

代码语言:javascript
复制
<h2>Edit Permissions</h2>
<ul>
{{#each role in model.roles}}
  <li>{{role.name}}</li>
  <ul>
  {{#each permission in model.permissions}}
    <li>{{ permission-checkbox permission=permission role=role }}</li>
  {{/each}}
  </ul>
{{/each}}
</ul>

工作溶液这里

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28628026

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档