2014-01-20 4 views
0

В моем приложении я создаю повторно используемый компонент пользовательского интерфейса, который позволит пользователю запросить встречу с тремя возможными моментами. Поскольку это многоразовый компонент пользовательского интерфейса, это будет представление (в моем понимании).Ember Controllers vs Views

Там, где все становится сложно, в реализации. Для этого мы будем использовать пару моделей (одна встреча с много раз). Когда я иду по пути добавления времени и сохранения назначения на сервер, я все время думаю, что управление моделями обычно является задачей контроллеров, а не представлением.

Так что же?

Я хочу создать контроллер во время инициализации представления и сделать все моделирование с этим? Или это нормально создать модель в представлении и манипулировать и сохранить ее там?

В конце концов, я хочу, чтобы просто включить вид в шаблоне, и все остальное должно работать:

{{#view App.ScheduleAppointment}} 

ответ

1

Многоразовые компоненты пользовательского интерфейса должны быть Components. THIS - еще один потрясающий ресурс.

И я думаю, что вы правы, управление моделями - это задача диспетчера. Не просмотры или компоненты, поскольку они всего лишь части UI. Повторное использование контекстов в случае компонентов.

Для обработки модели я думаю, вы должны послать действия к контроллеру: here

this.sendAction('action', param1, param2); 

Я бы выглядеть примерно так, от шаблонов:

{{my-component value1=value1 .... action="actionFromComponent" }} 

И в контроллере:

App.MyController = Ember.Controller.extend({ 
    actions: { 
     actionFromComponent: function(param1, param2) { 
      ..... 
     } 
    } 
}) 

Надеюсь, это поможет вам!

+0

Хорошая точка. Это, по-видимому, предполагает, что сохранение модели будет сделано в контроллере страницы, не так ли? Этот компонент будет включен на различные страницы/контроллеры. Я бы предпочел, чтобы контроллеры не знали об этом, так как они напрямую не связаны с ними. Могу ли я создать контроллер, который каким-то образом будет загружен компонентом, чтобы он был полностью автономным? (Я пытался сделать это, и он начал выглядеть уродливым) –

+0

@JeremyGillick да, вы можете объявить явный контроллер для своего компонента и вытащить его как зависимость в любой другой контроллер, используя массив 'needs', как описано здесь: http: // emberjs .com/руководства/контроллеры/зависимости между контроллерами/ – herom

+1

Компонент - это собственный контроллер. Я пробовал использовать свойство 'needs', как отметил @herom, но я не работаю, и я думаю, что это не должно. Компоненты изолированы от контекста, в котором они используются, то есть вы можете использовать их в нескольких контекстах (до тех пор, пока вы выполняете его интерфейс). Если вам нравится, вы можете поместить логику сохранения в компонент или использовать ее в mixin, который вы бы применили к контроллерам, которые его используют (мне это нравится лучше). – edpaez

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