В моем проекте, у меня есть следующие три модели:ember.js - Привязка к модели другого контроллера
- Club Модель: представляет спортивный клуб. Он имеет один
clubMeta
и многиеcustomCourts
. - ClubMeta Model: информация о клубе, относящаяся к приложению.
- CustomCourt Модель: принадлежит
club
. A клуб должен иметь customCourts только еслиclubMeta.customCourtsEnabled
istrue
.
клуб
var Club = DS.Model.extend({
... bunch of properties ...
clubmeta: DS.belongsTo('App.Clubmeta'),
customCourts: DS.hasMany('App.CustomCourt')
});
module.exports = Club;
Clubmeta
var Clubmeta = DS.Model.extend({
... bunch of properties ...
customCourtsEnabled: DS.attr('boolean'),
club: DS.belongsTo('App.Club')
});
module.exports = Clubmeta;
CustomCourt
var CustomCourt = DS.Model.extend({
name: DS.attr('string'),
glass: DS.attr('boolean'),
indoor: DS.attr('boolean'),
single: DS.attr('boolean'),
club: DS.belongsTo('App.Club')
});
module.exports = CustomCourt;
Что мне нужно сделать, это шаблон, в котором клуб (который является зарегистрированным пользователем) может добавить customcourts, только если clubmeta.customCourtsEnabled
is true
. Как мне сказали в another SO question, я должен использовать ArrayController
для обработки CustomCourts
.
Все нормально до этого момента, то проблема не приходит, потому что CustomCourtsController
нужно знать о клуб и clubmeta. Я попробовал это, с некоторыми вариациями на пути связывания:
var ClubCourtsController = Ember.ArrayController.extend({
needs: ['currentClub'],
customCourtsEnabledBinding: Ember.Binding.oneWay("App.currentClubController.content.clubmeta.customCourtsEnabled"),
...
});
CurrentClubController
var CurrentClubController = Ember.ObjectController.extend({
init: function() {
this._super();
console.log('Retrieving club ' + App.clubId);
this.set('content', App.Club.find(App.clubId));
}
});
module.exports = CurrentClubController;
Но ClubCourtsController.customCourtsEnabled
всегда возвращает неопределенное значение. Каков правильный способ сделать это?
Удивительного, Майк. В вашем ответе так много полезной информации, и теперь она работает. –