Я пытаюсь использовать функцию «потребности», чтобы один контроллер мог получить значение от другого. Вот JSFiddle, который показывает урезанную версию моего приложения, прежде чем связывать значение: http://jsfiddle.net/kevinwh/WRxnE/4/Emberjs: сбой перекрестного контроллера, потому что «контент» еще не существует
App.ApplicationController = Ember.ObjectController.extend({
init: function() {
this._super();
},
dishClicked: function() {
console.log('clicked');
this.incrementProperty('clickCount');
}
});
App.DishController = Ember.ObjectController.extend({
needs: ['application'],
init: function() {
this._super();
},
//clickCountBinding: 'controllers.application.clickCount'
});
В принципе, мой ApplicationController имеет свойство ClickCount, который обновляется (по действию) всякий раз, когда один из посудомоечных ссылок щелкнули , Нажатие на ссылку также активирует DishRoute через linkTo.
Теперь я хочу, чтобы содержащийся DishController также имел доступ к clickCount ApplicationController. Поэтому я добавляю свойство «needs» и свойство clickCountBinding (которое должно быть раскомментировано в JSFiddle). Затем, когда я нажимаю на ссылку, я получаю жалобу: утверждение не выполнено: не удалось делегировать set ('clickCount', 0) в свойство content для объектного прокси: его «контент» не определен.
По-видимому, привязка активируется до того, как содержимое модели установлено на контроллере. Поскольку контроллер настраивается с помощью linkTo, мои методы DishRoute.model() и DishRoute.setupController() не вызываются. Кроме того, метод DishController.init() даже не вызывается до того, как произойдет ошибка привязки.
Я рассмотрел возможность того, что я должен просто вставить объект-член контента в класс (закомментирован в JSFiddle), но при этом получается причудливый результат: количество кликов увеличивается отдельно для разных ссылок. Интересно, но не то, что мне нужно.
Итак - как мне поделиться значением clickCount на этих контроллерах? Есть ли другой способ настроить контент в DishController, чтобы привязка работала?
Ну, это делало тривиальный случай работы, хотя я обнаружил, что мне нужно изменить DishController на контроллер, а не на ApplicationController. Тем не менее, мне действительно нужен DishController, чтобы быть ObjectController (возможно, мой JSFiddle был слишком сложен, чтобы это было ясно). Есть ли способ заставить два объекта ObjectControllers работать вместе? Получение содержимого набора контроллеров деталей кажется проблемой. – kevinw
Вы, очевидно, не можете установить свойство в содержимое контроллера, если контроллер сначала не имеет содержимого, однако большую часть времени вы фактически хотите установить значение на контроллере. Чтобы заставить это работать, просто инициализируйте значение null в контроллере. –
Действительно. Установка начального значения для clickCount в DishController ** сделала ** сделать эту работу. Большое спасибо, хотя я должен признать, что этот бит волшебной магии путал меня. Для любого, кто видит это, рабочая версия: http://jsfiddle.net/kevinwh/WRxnE/5/ – kevinw