如何在没有模块支持的情况下使用ember.js

时间:2015-12-02 14:30:18

标签: javascript ember.js compatibility ecmascript-6 ecmascript-5

ember.js的指南假设一个人拥有完整的ES6支持,例如: http://guides.emberjs.com/v2.2.0/routing/specifying-a-routes-model/显示使用export default构造,并未指定任何替代方法来实现目标。但是,在ember支持的所有浏览器中都没有实现模块功能。

如何在不支持模块的浏览器中使用这些功能?这些示例中的代码将如何转换为ES5?

2 个答案:

答案 0 :(得分:3)

文档假设您使用的是转换工具,因为推荐的工具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与名称映射的关系)。没什么难的,但你必须建立一个简短的脚本来生成注册。

<小时/> 编辑blessenm: Ember with rollup

不幸的是我无法共享此代码,但它的工作原理如下:

  1. 脚本扫描项目目录并通过在遇到的每个ember-template-compiler.js文件上调用.hbs来编译模板。

  2. 脚本(实际上是同一个脚本)扫描项目目录并生成主入口点。它非常简单,如果它看到gallery/models/collection.js和`gallery / routes / picture.js&#39;,它将生成一个如下所示的主文件:

    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);
            // ...
        }
    });
    

    它应该只将您的文件名映射到解析器名称。作为奖励,您可以控制目录的组织方式。

  3. 在生成的文件上调用汇总。它将把所有东西拉到一起。我使用IIFE导出格式,跳过所有运行时分辨率混乱。我建议您设置rollup to work with babel,以便使用ES6语法。

  4. 我没有使用任何特定于ember的模块,但它不应该太难添加。我的猜测主要是正确设置汇总导入分辨率。据我所知,它可以开箱即用。

答案 1 :(得分:2)

您应该考虑使用Ember CLI http://ember-cli.com/

您在ES6中编写代码并将其转换为ES5。