2013-10-15 3 views
6

Я относительно новичок в ember.js. У меня есть две модели User и RoleКак настроить несколько контроллеров на одном маршруте в ember.js?

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 на том же маршруте, который будет иметь все доступные роли независимо от пользователя? Если я сделаю setupController в UserEditRoute, который создаст столкновение имен для RolesController.

Моя цель состоит в том, чтобы все роли были перечислены с помощью флажков. Роли, которые уже назначены пользователю будут проверены и другие будут бесконтрольно

jsfiddle link

ответ

15

В контроллере пользователя можно установить свойство должен сказать уголек телеграфировать контроллер ролей.

Вы также должны назначить модель для этого контроллера, так что вы установите setupController крючок UsersEditRoute и лет имеют свои роли, перечисленные

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/

+0

Это идеальное решение. Большое спасибо! – kaushikb9

Смежные вопросы