我正在面向ember.js应用程序的结构,我想我理解了路由,控制器,模型,模板和帮助器的用途。
我不明白的是我会把复杂的功能放在哪里。假设我有一个名为computeSuggestions
的动作,它位于一个控制器中。可能会发生这样一个动作非常庞大和复杂,并且如果它在自己的模块中会更容易测试,它可以被定义为纯函数。
处理此问题的典型方法是什么?我对JavaScript导入语句不是很有经验,但我知道它们不像Java或Python那么简单。我也不确定目录结构中哪个地方是这种功能的正常位置。
答案 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';
导入。
希望有所帮助!