ember.js的指南假设您拥有完整的ES6支持, http://guides.emberjs.com/v2.2.0/routing/specifying-a-routes-model/显示使用export default
结构,并没有指定任何替代方法来实现目标。然而,模块功能并未在所有支持的浏览器中实现。如何在没有模块支持的情况下使用ember.js
如何将这些功能与不支持模块的浏览器结合使用?这些示例中的代码如何转换为ES5?
ember.js的指南假设您拥有完整的ES6支持, http://guides.emberjs.com/v2.2.0/routing/specifying-a-routes-model/显示使用export default
结构,并没有指定任何替代方法来实现目标。然而,模块功能并未在所有支持的浏览器中实现。如何在没有模块支持的情况下使用ember.js
如何将这些功能与不支持模块的浏览器结合使用?这些示例中的代码如何转换为ES5?
文档假设您使用的是一个转译工具,因为推荐的工具ember-cli
的确如此。除非你有充分的理由不使用它,否则你一定要研究它。
但是,如果没有它,它是完美的。例如,没有模块系统,Ember将把controller:posts.index
映射到App.PostsIndexController
。所以这应该适用于您链接的示例:
App.Router.map(function() {
this.route('favorite-posts');
});
App.FavoritePostsRoute = Ember.Route.extend({
model() {
return this.store.query('post', { favorite: true });
}
});
您也可以使用Ember与您自己的模块支持。我成功地拥有了一个基于rollup的Ember项目。尽管如此,它需要更多的工作来让resolver找到你的类(解析器链接也记录了名称映射与ember相关的方式)。没有什么难,但你必须建立一个简短的脚本来生成注册。
可惜我不能分享这个代码,但它的工作原理是这样的:
脚本扫描项目目录,并通过调用编译模板每遇到.hbs
文件,该文件就会生成ember-template-compiler.js
。
脚本(实际上是同一个脚本)扫描项目目录并生成主入口点。这是很简单的,如果它看到,说gallery/models/collection.js
和`图库/路由/ picture.js',它会生成一个主文件看起来像这样:
import r1 from 'gallery/models/collection.js';
import r2 from 'gallery/routes/picture/index.js';
// ...
Ember.Application.initializer({
name: 'registrations',
initialize: function (app) {
app.register("model:collection", r1);
app.register("route:picture.index", r2);
// ...
}
});
它应该只是你的映射文件名到解析器的名称。作为奖励,你可以控制你的目录是如何组织的。
调用生成的文件的汇总。它会把所有的东西放在一起我使用IIFE导出格式,跳过所有运行时解决的混乱。我建议你设置rollup to work with babel,这样你就可以使用ES6语法。
我没有使用任何特定于烬的模块,但它不应该太难添加。我的猜测是,这主要是正确设置汇总导入分辨率的问题。就我所知,它可能是开箱即用的。
你应该考虑使用灰烬CLI http://ember-cli.com/
你写在你的ES6代码并将其transpiles下降到ES5。
你有没有在github上的代码?只是想看看你是如何与汇总工作。 – blessenm
@blessenm我编辑了答案,详细说明了它的工作原理。不幸的是,该项目不公开,所以我不能显示代码本身。无论如何,我希望它有帮助。您也可以在Ember论坛上阅读[本文](http://discuss.emberjs.com/t/can-i-use-ember-with-npm-and-webpack/9160/9)。你也可以看看[这个项目](https://github.com/tulios/ember-webpack-example)如何使用webpack集成一个Ember项目。不同的工具,但方法相同。 – spectras
感谢您的回复。将通过他们并弄清楚。我想知道使用汇总有什么明显的好处?与使用ember-cli相比,你是否构建了输出大小? – blessenm