Ember.JS:Ember-Objects以及它们导出的位置

时间:2016-11-08 09:42:35

标签: javascript ember.js

我正在尝试掌握 Ember.JS 的基础系统。那些Ember-Objects 导出以及它们是如何使用的?

部件

export default Ember.Component.extend({ ... });

控制器

export default Ember.Controller.extend({ ... });

模型

export default DS.Model.extend({ ... });

路由

export default Ember.Route.extend({ ... });

......它们都遵循相同的结构:它们扩展了一些对象并导出了一些东西。

有人知道更多吗?谢谢!

1 个答案:

答案 0 :(得分:4)

我认为您在这里解释了export关键字错误。

这并不意味着文件以不同的格式写在其他地方,但是:

  

如果某个模块(=文件)被import编辑,则该文件中export的内容可供导入到导入器中。

将其视为使其他模块可以使用某些部件,简称为公共API。

Ember文件通常只导出一件事,因为有一个强大的命名约定使得Ember引擎以这种方式工作 这就是为什么如果您声明/user路由,它会尝试使用您的routes/user.jscontrollers/user.jstemplates/user.hbs文件(如果存在),而无需指定任何内容。 以类似的方式,这是使组件在模板中可用的原因。

因此,您在这些文件中找到了单行export default Ember.Something.extend({ ... });

但是,您可以在单个文件中包含多个export语句的模块(=文件),这是完全有效的。

// Example from babel website

// lib/mathplusplus.js
export * from "lib/math";
export var e = 2.71828182846;
export default function(x) {
    return Math.exp(x);
}
// app.js
import exp, {pi, e} from "lib/mathplusplus";
console.log("e^π = " + exp(pi));

来自Babel网站的Learn ES2015有一些示例,您可以在MDN上详细了解export声明。

在Ember应用程序中,根据我的经验,您将查找多个导出的文件,这些文件主要位于应用程序中多个模块使用的某些目录中,或者不绑定到Ember引擎自动导入,就像某些工具一样

以下示例显示导入从另一个模块导出的变量的Ember.Controller

// utils/messages.js
export var hello = 'Hello!';
export var bye = 'Good Bye!'

// controllers/hello.js
import { hello } from "utils/messages";

export default Ember.Controller.extend({
  firstName: 'David',

  helloString: Ember.computed('firstName', function(){
    return `${hello} ${this.get('firstName')}`;
  })
});