Ember - пытается получить доступ к данным модели CompaniesController из UsersController или UsersRoute
Я упростил историю для краткости.
У меня есть 2 базовые модели, Пользователь и Компания, и отображать списки каждой на отдельных шаблонах. Но в списке Пользователи я хочу иметь выпадающий список сверху, чтобы фильтровать то, что пользователи видны. Сейчас я просто хочу список компаний из модели / контроллера компании в представлении "Пользователь" после некоторой обработки данных (мне нужен только список названий компаний, а не весь объект в раскрывающемся списке).
Мои маршруты:
App.Router.map(function(){
this.resource("users");
this.resource("companies");
)};
Маршрут модели пользователя и контроллер для маршрута пользователя:
App.User = DS.Model.extend({
username: DS.attr('string'),
company: DS.attr('string')
});
App.UsersRoute = Ember.Route.extend({
model: function(){
return this.store.find("User");
}
});
App.UsersController = Ember.ArrayController.extend({
companyList: [],
filterUserCompany: function(){
console.log("filterUserCompany");
},
count: Ember.computed.alias("length")
});
Модель компании, маршрут и диспетчер:
App.Company = DS.Model.extend({
name: DS.attr('string'),
address1: DS.attr('string'),
address2: DS.attr('string'),
city: DS.attr('string'),
state: DS.attr('string'),
postal: DS.attr('string'),
country: DS.attr('string'),
created: DS.attr('date')
});
App.CompaniesRoute = Ember.Route.extend({
model: function(){
return this.store.findAll("Company");
}
});
App.CompaniesController = Ember.ArrayController.extend({
count: Ember.computed.alias("length")
});
Шаблон Users.htm (вверху - выпадающий список компаний, где я хочу указать только название компании, а внизу - список пользователей)
<div class="inner-content-tools" style="width:auto;height:28px;">
<div class="add-btn filterlist-item">Add user</div>
<div class="filterlist-item">
{{view Ember.Select
id="filter_company"
content=companyList
selection=company
class="selectlist"
prompt="Show all users, or select company"
change=filterUserCompany
}}
</div>
</div>
<br />
<table id="data-table" width="100%" cellspacing="0" style="margin-bottom:20px;">
{{#each}}
<tr>
<td>{{company}}</td>
<td>{{username}}</td>
<td>{{#link-to "user" this tagName="span"}}go to{{/link-to}}</td>
</tr>
{{/each}}
</table>
</div>
Я пробовал несколько производных этого в UsersRoute
setupController: function (controller, model) {
this._super(controller, model);
// THIS WORKS TO FILL DROP DOWN
controller.set("companyList", ["ID Plans", "ReicheGroup"]);
// THIS NEVER WORKS
//this.controllerFor('companies').get('model');
//
},
И после того, как я получу модель компаний (массив компаний), я хочу перебрать их и создать простой массив списков для свойства companyList, чтобы заполнить раскрывающийся список в шаблоне Users.
Я также пробовал многие производные этого в UsersController
App.UsersController = Ember.ArrayController.extend({
needs: "companies",
companyList: function(){
// AND ITERATE controllers.companies.model TO
// GET THE COMPANY NAME (.name) FROM EACH COMPANY OBJECT
return controllers.companies.model.ITERATE THESE AND RETURN ARRAY OF NAMES
}.property(),
filterUserCompany: function(){
console.log("filterUserCompany");
},
count: Ember.computed.alias("length")
});
Все работает нормально, поскольку у меня есть два рабочих маршрута, которые правильно отображают шаблоны, один показывает список компаний, а другой показывает список пользователей (так что Restadapter работает нормально). Обе страницы отображаются и отлично работают (mydomain.com/users и mydomain.com/companies), а также переходят к отдельному пользователю или компании соответственно. Но я просто хочу, чтобы на странице пользователей был чертов список компаний, и было просто неудобно просто сделать ajax-вызов и получить список компаний (почему бы не использовать компании, которые уже есть в магазине).
Помоги мне, Оби-Вон, ты моя единственная надежда.