在ember-cli应用程序中放置复杂功能的位置?

时间:2014-12-22 19:48:00

标签: ember.js ember-cli

我正在面向ember.js应用程序的结构,我想我理解了路由,控制器,模型,模板和帮助器的用途。

我不明白的是我会把复杂的功能放在哪里。假设我有一个名为computeSuggestions的动作,它位于一个控制器中。可能会发生这样一个动作非常庞大和复杂,并且如果它在自己的模块中会更容易测试,它可以被定义为纯函数。

处理此问题的典型方法是什么?我对JavaScript导入语句不是很有经验,但我知道它们不像Java或Python那么简单。我也不确定目录结构中哪个地方是这种功能的正常位置。

2 个答案:

答案 0 :(得分:2)

基于http://www.ember-cli.com/#using-modules的文档,似乎这样的事情最好放在/ app / utils文件夹中。

答案 1 :(得分:1)

我会考虑使用Ember Mixins来实现此功能,您可以在此处阅读更多相关信息:http://emberjs.com/api/classes/Ember.Mixin.html

示例:

app/mixins/compute-suggestions-controller.js

export default Ember.Mixin.create({
    actions: {
        computeSuggestions: function(modelOrSomething) {
            // Do your complicated action here
        }
    }
});

app/controllers/your-controller.js

import ComputeSuggestionsControllerMixin from '../mixins/compute-suggestions-controller';

export default Ember.Controller.extend(ComputeSuggestionsControllerMixin, {
    // Rest of controller definition here
});

然后,操作computeSuggestions将作为控制器上的操作提供,因为控制器已使用mixin进行了扩展。

如果您正在寻找比使用mixins更通用的解决方案,那么您可以自由使用ES6模块模式导入您需要的任何模块或服务。我通常将我的通用内容放入app/utils/module-name.js,然后只需通过import utilName from '../utils/util-name.js';导入。

希望有所帮助!