首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何连接相关的模型/控制器

如何连接相关的模型/控制器
EN

Stack Overflow用户
提问于 2013-12-16 13:01:24
回答 1查看 72关注 0票数 0

我正在编写一个Ember应用程序,用于存储关于位置的“推荐”。

用户必须从列表中选择一个位置(由自定义API检索),编写一个描述,拍摄一张照片,并使用该数据发布一篇文章。

因此,我有一个LocationModel和LocationController,它从API中检索位置,在列表上显示它,并允许用户选择其中之一。然后是一个DescriptionController和PhotoController,允许用户编写描述并拍摄照片。

我需要在每个控制器/模型上都有这些“部分”,因为我希望它们在我最后一个应用程序的其他部分上重用。

我推荐的模型如下:

代码语言:javascript
复制
App.RecommendationModel = DS.Model.extend({
    location: DS.BelongsTo('location'),
    description: DS.BelongsTo('description'),
    photo: DS.BelongsTo('photo')
});

相应的建议模板:

代码语言:javascript
复制
<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>

每个“区段”都有一个带有“完整”动作的按钮:

例:

代码语言:javascript
复制
App.DescriptionController = Ember.Controller.extend({
  actions: {
    complete: function() {
      _saveDescription(this.get('value'));
    }
  }
});

我的问题是如何“组装”这些部件以实现RecommendationModel。

我认为完整的行动应该是:

代码语言:javascript
复制
App.DescriptionController = Ember.Controller.extend({
  actions: {
    complete: function() {
      recommendation.set('description', this);
    }
  }
});

“完全”操作是否应该放在RecommendationController中呢?如果是这样,我应该如何连接每个组件?

任何其他办法都将不胜感激。

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-16 15:19:52

我认为“全局”complete操作应该由RecommendationController来处理,而每个complete操作应该由每个控制器来处理(描述、图片等等)。

您可以做的是在处理建议的一部分的每个控制器中使用needs属性:

代码语言:javascript
复制
needs: ['recommendation'],

并使RecommendationRoute设置和使用每个控制器和模板的每个部分的嘉奖如下:

代码语言:javascript
复制
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,如下所示:

代码语言:javascript
复制
this.get('controllers.recommendation')

例如,一旦完成了建议的所有部分,您就可以启用complete操作。

最后,可以将“全局”complete操作绑定到推荐模板中的元素中,或者只需在RecommendationRouterenderTemplate中添加另一个render调用即可。

希望能帮上忙!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20611591

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档