4

有没有办法,当你多次渲染一个视图时,让它们中的每一个都与一个控制器的实例相关联?

很确定这不是正确的做法,所以我愿意接受有关我应该如何做的迹象。但这里是用例:

我有这些路线:

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);
      }
    })
  })
});

我正在尝试在路线中列出 a中的Fields 。为此:FormformRoute

  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 }}

在其中我们将 连接outletfieldsList. 这会渲染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);
  }
})

这意味着在渲染视图时,outletinfield_view.handlebars将与showField

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

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

如果我只有一个字段,然后单击(edit),它将切换连接outletwith editField,这是我目前正在尝试做的。Field但是,如果my中有超过 1 个Form,当我按下 时(edit),它会将所有outlets 连接到editField

因此这是有道理的router.get('fieldsListController').connectOutlet('showField', field);,但我不知道如何获取正确的控制器实例(和/或为每个FieldViews.

我在这里很迷茫。我正在尝试在不改变整个视图的情况下进行“内联编辑”,而且它似乎不是关于拥有一组视图的好文档/教程,每个视图都有一个独立的outlet......

整个代码库和在线实时版本的链接位于页面顶部。

4

1 回答 1

0

您可能正在寻找{{control}}正在开发中但可以在 Ember.js源代码中访问的帮助程序。这个帮助器被设计成在每次使用这个帮助器时实例化一个控制器

于 2013-04-23T19:18:26.577 回答