【发布时间】:2015-10-18 04:05:59
【问题描述】:
现在我正在我的 ember 应用程序中构建一个特定的屏幕, 具有未知数量的嵌套组件。正因为如此,我试图不 根据显示的组件更改 url 还有一些基本信息 我想在每个子屏幕上显示。
目前,当真正的动作逻辑仅在路线上定义时,我似乎必须重新定义并在所有这些动作名称中传递所有这些动作名称。有没有办法 干燥这些动作引用可能在一个控制器或一个“父”组件中。
这里是一个 ember-twiddle 示例,我将这些组件渲染到一个插座 http://ember-twiddle.com/31a69c62ceddcb69b02b
这里是路线示例
import Ember from 'ember';
export default Ember.Route.extend({
_fixtureModels: [
{ person: {name: 'bill'}, sideModel: null},
{ person: {name: 'bill'}, sideModel: { postName: 'test post' }},
{ person: {name: 'bill'}, sideModel: { commentName: 'test comment'}}
],
_renderSideModel: function (template, sideModel) {
this.render();
this.render(template, {
outlet: 'side-model',
into: 'index',
model: sideModel
});
},
renderTemplate: function () {
this.render();
this.render('someComponentWrapper', {
outlet: 'side-model',
into: 'index'
});
},
model: function () {
return this._fixtureModels[0];
},
actions: {
renderTopLevel: function () {
return this.renderTemplate();
},
renderPost: function () {
return this._renderSideModel('post', this._fixtureModels[1]);
},
renderComment: function () {
return this._renderSideModel('comment', this._fixtureModels[2]);
}
}
});
我知道 URL 应该是 Ember 中的王者,这是非常有罪的,但是很难重建一个潜在的嵌套视图。
【问题讨论】:
-
从技术上讲,您的组件操作应该以控制器和路由结束。您还可以从组件中指定目标对象
-
@abFx 组件操作不会冒泡。
-
@BillPull 感谢您使用 Ember Twiddle。请务必留下反馈。
-
@Gaurav 看看这个...ember-twiddle.com/dd5b9636b5ced43dd440
标签: ember.js ember-cli ember-router ember-components