我正在编写一个Ember应用程序,用于存储关于位置的“推荐”。
用户必须从列表中选择一个位置(由自定义API检索),编写一个描述,拍摄一张照片,并使用该数据发布一篇文章。
因此,我有一个LocationModel和LocationController,它从API中检索位置,在列表上显示它,并允许用户选择其中之一。然后是一个DescriptionController和PhotoController,允许用户编写描述并拍摄照片。
我需要在每个控制器/模型上都有这些“部分”,因为我希望它们在我最后一个应用程序的其他部分上重用。
我推荐的模型如下:
App.RecommendationModel = DS.Model.extend({
location: DS.BelongsTo('location'),
description: DS.BelongsTo('description'),
photo: DS.BelongsTo('photo')
});相应的建议模板:
<section id="select-location">
{{render "location" location}}
</section>
<section id="write-description">
{{render "description" description}}
</section>
<section id="take-photo">
{{render "photo" photo}}
</section>
<section id="send-recommendation">
{{render "share"}}
</section>每个“区段”都有一个带有“完整”动作的按钮:
例:
App.DescriptionController = Ember.Controller.extend({
actions: {
complete: function() {
_saveDescription(this.get('value'));
}
}
});我的问题是如何“组装”这些部件以实现RecommendationModel。
我认为完整的行动应该是:
App.DescriptionController = Ember.Controller.extend({
actions: {
complete: function() {
recommendation.set('description', this);
}
}
});“完全”操作是否应该放在RecommendationController中呢?如果是这样,我应该如何连接每个组件?
任何其他办法都将不胜感激。
谢谢!
发布于 2013-12-16 15:19:52
我认为“全局”complete操作应该由RecommendationController来处理,而每个complete操作应该由每个控制器来处理(描述、图片等等)。
您可以做的是在处理建议的一部分的每个控制器中使用needs属性:
needs: ['recommendation'],并使RecommendationRoute设置和使用每个控制器和模板的每个部分的嘉奖如下:
App.RecommendationRoute = Ember.Route.extend({
setupController: function(controller, model) {
this._super();
var descController = this.controllerFor('description').set('content', model.get('description'));
var photoController = this.controllerFor('photo').set('content', model.get('photo'));
this.set('descController', descController).set('photoController', photoController);
...
},
renderTemplate: function() {
this._super();
this.render('description', {
into: 'application',
outlet: 'description',
controller: this.get('descController')
});
this.render('photo', {
into: 'application',
outlet: 'photo',
controller: this.get('photoController')
});
}
});这样,建议的一部分的每个控制器都可以处理它的complete操作。所有用户都使用相同的recommendation模型,它们可以在必要时调用RecommendationController,如下所示:
this.get('controllers.recommendation')例如,一旦完成了建议的所有部分,您就可以启用complete操作。
最后,可以将“全局”complete操作绑定到推荐模板中的元素中,或者只需在RecommendationRoute的renderTemplate中添加另一个render调用即可。
希望能帮上忙!
https://stackoverflow.com/questions/20611591
复制相似问题