Как управлять коллекцией представлений, которые имеют независимые выходы?

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

Я уверен, что это неправильный способ сделать это, поэтому я открыт для указаний на то, как я должен это делать. Но вот пример использования:

У меня есть эти маршруты:

FormBuilder.Router = Ember.Router.extend({
  // ...
  form: Ember.Route.extend({
    route: '/form/:form_id/edit',
    connectOutlets: function (router, form) {
      router.get('applicationController').connectOutlet('editForm', form);
      router.get('editFormController').connectOutlet( 'fieldsList', form.get('fields') );
    },

    editField: Ember.Route.transitionTo('editOneField'),
    showField: Ember.Route.transitionTo('showOneField'),

    initialState: 'showOneField',
    editOneField: Ember.Route.extend({
      connectOutlets: function (router, field) {
        router.get('fieldsListController').connectOutlet('editField', field);
      }
    }),
    showOneField: Ember.Route.extend({
      connectOutlets: function (router, field) {
        router.get('fieldsListController').connectOutlet('showField', field);
      }
    })
  })
});

Я пытаюсь перечислить Fieldв Form в form маршрут. Route для этого есть:

  form: Ember.Route.extend({
    route: '/form/:form_id/edit',
    connectOutlets: function (router, form) {
      router.get('applicationController').connectOutlet('editForm', form);
      router.get('editFormController').connectOutlet( 'fieldsList', form.get('fields') );
    },

EditFormView оказывает шаблон edit_form_view:

<h2>Editing form {{id}}</h2>

{{view FormBuilder.AddFormFieldsView}}

{{ outlet }}

В котором мы соединяем outlet к fieldsList, Это делает fields_list шаблон, и подключен к FieldsListController контроллер, который является массивом Field,

{{! fields_list.handlebards }}
<p>The form fields</p>

<ul>
{{#each content}}
  {{view FormBuilder.FieldView}}
{{/each}}
</ul>

Так что это делает представление FieldView который использует field_view шаблон:

# {{publicName}}

{{outlet}}

И вот тут у меня проблема. Я не могу "подключить" это outletпотому что это часть fieldsListController,

Я опишу, что я пытаюсь сделать. У меня есть это в моем контроллере.

editField: Ember.Route.transitionTo('editOneField'),
showField: Ember.Route.transitionTo('showOneField'),

initialState: 'showOneField',
editOneField: Ember.Route.extend({
  connectOutlets: function (router, field) {
    router.get('fieldsListController').connectOutlet('editField', field);
  }
}),
showOneField: Ember.Route.extend({
  connectOutlets: function (router, field) {
    router.get('fieldsListController').connectOutlet('showField', field);
  }
})

Это означает, что при рендеринге outlet в field_view.handlebars будет связан с showField:

<pre>show a field yo :)</pre>

<a {{action editField this}}>(edit)</a>

Если у меня есть только одно поле, и нажмите на (edit), переключится подключить outlet с editField, что так далеко, что я пытаюсь сделать. Тем не менее, если есть более 1 Field в моем Formкогда я нажимаю (edit)соединяет ВСЕ outletс editField,

Это имеет смысл из-за этого router.get('fieldsListController').connectOutlet('showField', field);, но я не знаю, как получить правильный экземпляр контроллера (и / или создать экземпляр контроллера для каждого из FieldViews.

Я совершенно потерян прямо здесь. Я пытаюсь сделать "встроенное издание" без изменения всего представления, и это не похоже на хорошую документацию / учебные пособия о наличии набора представлений, каждый из которых имеет независимый outlet...

Ссылки на всю кодовую базу и онлайн-версию находятся вверху страницы.

1 ответ

Вы, вероятно, ищете {{control}} хелпер, который находится в стадии разработки, но доступен в исходном коде Ember.js. Этот помощник разработан таким образом, что он создает экземпляр контроллера для каждого использования этого помощника.

Другие вопросы по тегам