2013-02-22 3 views
2

У меня есть полный диалог редактирования контактов. Теперь я хотел бы создать соответствующий новый контактный диалог с наименьшим необходимым усилием. Новый диалог идентичен, appart из инициализации модели.Ember.js: Как я могу повторно использовать контроллеры/представления другого маршрута

У меня есть следующий Новый маршрут:

App.ContactNewRoute = App.BaseEntityRoute.extend({ 
     init: function() { 
      this._super(); 
      this.keyName = "contact_id"; 
      this.controllerRoute = "contact.new"; 
      this.datasource = App.contactDataSource.getNewContact; 
     } 
}); 

Как я могу сказать уголек, что он должен использовать ContactEditController и ContactEditView для этого маршрута?

+0

ли вы хотите повторно использовать класс контроллера или же один и тот же экземпляр? Я вижу возможное решение для каждого случая. – mavilein

+0

Я хочу повторно использовать класс контроллера. – AyKarsi

ответ

3

Если вы хотите повторно использовать класс, почему бы не попробовать что-то вроде этого?

App.ContactNewController = App.ContactEditController.extend(); 

App.ContactNewView = App.ContactEditView.extend(); 

Ember теперь находит классы, основанные на его схеме именования, и все должно быть хорошо. Но зачем вам это нужно? Вы в основном зеркалируете все части маршрута на новом маршруте с новым именем, но все остальные компоненты (контроллер, просмотр) остаются неизменными?

+0

, так что вы говорите, это то, что было бы лучше перейти на маршрут ContactEdit с поддельным идентификатором? например contact.edit.0 – AyKarsi

+0

О, я только что заметил, что я не думал о вашем вопросе. ^^ Вы хотите вернуть нам возможность создания нового контакта и редактирования контакта, поддерживаемого одним и тем же контроллером. Итак, я предполагаю, что этот подход прекрасен. Единственный другой способ - сделать комбинированный компонент, где вы можете редактировать и создавать. Но тогда я не буду легко прыгать в состояние создания, предоставляя URL-адрес. – mavilein

+0

В этом случае вы могли бы использовать как поддельный идентификатор, как вы упомянули выше. Так что мое предложение отлично подходит для этого случая, поскольку это похоже на яркую оценку вашей проблемы. – mavilein

1

Ember Mixin также могут быть использованы для этого: http://emberjs.com/api/classes/Ember.Mixin.html

+1

Да, это тоже интересный подход! Но я бы предпочел создать mixin для более общей логики, которая используется повторно более одного раза. Но это только мое чувство кишки. – mavilein

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