视图与 Ember.js 中的组件

我正在学习 ember.js,并试图理解视图和组件之间的区别。我认为两者都是制造可重用组件的一种方法。

来自 Ember 网站的观点:

在 Ember.js 中创建视图通常只有以下原因:
- 当您需要复杂的用户事件处理时
- 当你想创建一个 < strong > 可重用的组件时

来自 Ember 网站关于组件的介绍:

组件是一个定制的 HTML 标记,您使用 JavaScript 实现它的行为,并使用 Handlebar 模板描述它的外观。它们允许您创建可以简化应用程序模板的 可重复使用的控件

那么视图和组件之间的主要区别是什么呢?在一个常见的例子中,我更愿意使用视图而不是组件,反之亦然?

21770 次浏览

微光,观景

微光,观景目前仅限于 W3C 为您创建的标记。但是,如果您想定义自己的特定于应用程序的 HTML 标记,然后使用 JavaScript 实现它们的行为呢?你不可能用 微光,观景做到这一点。

微光,组件

这正是组件允许你做的。事实上,W3C 目前正在研究 自定义元素规范,这是一个非常好的主意。

Ember 的组件实现试图尽可能接近 Web 组件规范。一旦 < strong > 自定义元素 在浏览器中得到广泛应用,您就应该能够轻松地将 Ember 组件迁移到 W3C 标准,并让采用新标准的其他框架也可以使用它们。

这对我们非常重要,我们正在与标准机构密切合作,以确保我们的组件实现与 Web 平台的路线图相匹配。

同样需要注意的是,微光,组件实际上是 微光,观景(一个子类) ,但它完全是 与世隔绝。其模板中的属性访问转到 风景对象,操作也以 风景对象为目标。没有访问周围的 context或外围的 controller 传递所有上下文信息,这不是一个 微光,观景的情况,它确实有访问它的周围的控制器,例如在一个视图内部,你可以做一些像 this.get('controller')这样的事情,它会给你的控制器目前关联的视图。

那么视图和组件之间的主要区别是什么呢?

因此,除了这些组件之外,主要的区别在于,它们允许你创建自己的标签,而且在将来某个时候,当 < strong > 自定义元素 可用时,也可以在其他支持自定义元素的框架中迁移/使用这些组件,实际上,在某个时候,一个 member 组件会使一个视图有些过时,这取决于具体的实现情况。

在一个常见的例子中,我更愿意使用视图而不是组件,反之亦然?

遵循上面的步骤,这显然取决于您的用例。但是根据经验,如果你需要在视图中访问它周围的控制器等,可以使用 微光,观景,但是如果你想隔离视图,只传递它工作所需要的信息,使其与上下文无关,并且可重用性更高,那就使用 微光,组件

希望能有帮助。

更新

随着 通往 Ember 2.0的道路的发布,现在鼓励您在大多数情况下使用组件而不是视图。

答案很简单: 使用组件

根据2013年8月录制的一段培训视频,Yehuda Kats 和 Tom Dale (Ember 核心团队成员)告诉观众,除非你是框架开发人员,否则不要使用视图。他们对句柄进行了大量增强,并引入了组件,因此视图不再是必要的。视图在内部用于为\{\{ # if }和\{\{ out }}之类的东西供电。

组件还非常接近将构建到浏览器中的 Web 组件标准,因此构建 Ember 组件有很多好处。

更新2014-11-27

现在更重要的是使用组件而不是视图,因为 Ember 2.0将在输入路由时使用可路由组件,而不是控制器/视图。为了以后证明你的应用程序,最好远离视图。

资料来源:

现在的情况是,v2.x是当前的稳定版本,视图已经被完全否定了。

因此,在 Ember 2.0中使用 \{\{view}}关键字将触发一个断言:

断言失败: 在 Ember 2.0中已经删除了使用 \{\{view}}或基于它的任何路径

如果你必须在 Ember 2.0中使用视图,你可以使用 灰烬-遗产-观点插件,也就是 将与 Ember 兼容,直到版本2.4

因此,总的来说-组件是现在的(视图被删除)和未来-它们也将取代控制器。参见 可路由组件