2016-11-08 28 views
2

我正试图掌握底层系统Ember.JS。那些Ember-Objects 出口,它们是如何使用的?Ember.JS:Ember-Objects和它们被导出到的位置

部件

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

控制器

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

模型

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

条路线

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

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

有人知道更多?谢谢!

回答

4

我想你是在这里解释关键字export错误。

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

如果一个模块(=文件)是import版,那么事情在该文件是export版可用给进口商。

把它看作是让其他模块可以使用某些部件的公共API。

Ember文件通常只输出一个东西,因为有一个强大的命名约定使Ember引擎以这种方式工作。
这就是为什么如果您声明/user路由,它将尝试使用您的routes/user.js,controllers/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)); 

从巴贝尔网站的Learn ES2015有几个例子,你可以阅读更多关于MDNexport声明。

在Ember应用程序中,您将从我的经验中找到具有多个导出的文件,这些文件通常位于某些目录中,以供应用程序中的多个模块使用,或不绑定到Ember引擎自动导入,如utils的。

下面的例子显示了一个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')}`; 
    }) 
}); 
+0

AAAAH,还好,所以我要** **进口的东西在其他文件_rely_文件? – Timo

+0

“导出”使它们对节点可见? – Timo

+0

是的,您需要使用'import'语句才能使用模块。另外,由于这是一个ES2015功能,我认为目前在nodejs中不可用,除非您使用像Babel这样的转译器。 – damienc