有没有办法,当你多次渲染一个视图时,让它们中的每一个都与一个控制器的实例相关联?
很确定这不是正确的做法,所以我愿意接受有关我应该如何做的迹象。但这里是用例:
我有这些路线:
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中的Field
s 。为此: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
infield_view.handlebars
将与showField
:
<pre>show a field yo :)</pre>
<a {{action editField this}}>(edit)</a>
如果我只有一个字段,然后单击(edit)
,它将切换连接outlet
with editField
,这是我目前正在尝试做的。Field
但是,如果my中有超过 1 个Form
,当我按下 时(edit)
,它会将所有outlet
s 连接到editField
。
因此这是有道理的router.get('fieldsListController').connectOutlet('showField', field);
,但我不知道如何获取正确的控制器实例(和/或为每个FieldView
s.
我在这里很迷茫。我正在尝试在不改变整个视图的情况下进行“内联编辑”,而且它似乎不是关于拥有一组视图的好文档/教程,每个视图都有一个独立的outlet
......
整个代码库和在线实时版本的链接位于页面顶部。