6

我对 ember.js 比较陌生。我有两个模型UserRole

App.User = DS.Model.extend({
    name: DS.attr('string'),
    roles: DS.hasMany('role')
});

App.Role = DS.Model.extend({
    name: DS.attr('string')
});

在我的应用程序中,我需要为一个用户分配和/或删除角色。为此,我需要循环并比较两个控制器 - 角色(来自用户有角色)与所有可用角色

我通过在user/edit template

Assigned Roles: {{#each role in roles}}*{{role.name}}{{/each}}

但是,我如何在同一路由中拥有另一个 RolesController,它将拥有独立于用户的所有可用角色?如果我在 UserEditRoute 中执行 setupController,则会为 RolesController 创建名称冲突。

我的目标是用复选框列出所有角色。已分配给用户的角色将被选中,其他角色将被取消选中

jsfiddle链接

4

1 回答 1

15

在用户控制器中,您可以设置需求属性来告诉 ember 连接角色控制器。

您还应该为此控制器分配模型,因此设置 UsersEditRoute 的 setupController 挂钩并列出您的角色

App.UsersEditRoute = Ember.Route.extend({
  setupController: function(controller,model) {
        controller.set('model', model);//UsersEditController
        this.controllerFor('roles').set('model',this.store.find('role'));
  }
});

控制器

App.UsersEditController = Em.ObjectController.extend({
    needs: "roles",
    rolesController: Ember.computed.alias("controllers.roles")
});
App.RolesController = Em.ArrayController.extend({});

最后是模板

  <script type="text/x-handlebars" data-template-name="users/edit">
    <h3>User Edit</h3>
      <p>Name: {{name}}</p>
      <p>Assigned Roles: {{#each userRole in roles}}&nbsp;*{{userRole.name}}{{/each}}</p>
      <p>Available Roles:{{#each role in rolesController}}&nbsp;*{{role.name}}{{/each}}</p>
  </script>

jsfiddle http://jsfiddle.net/tXFkZ/3/

于 2013-10-15T13:48:07.480 回答