143

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

来自 Ember 的网站上的观点:

Ember.js 中的视图通常仅出于以下原因创建:
- 当您需要复杂的用户事件处理时
- 当您想要创建可重用的组件时

来自 Ember 的组件网站:

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

那么视图和组件之间的主要区别是什么?什么是一个常见的例子,我更喜欢在组件上使用视图,反之亦然?

4

3 回答 3

170

Ember.View

Ember.View目前仅限于 W3C 为您创建的标签但是,如果您想定义自己的应用程序特定的 HTML 标记,然后使用 JavaScript 实现它们的行为?您实际上无法使用Ember.View执行此操作。

Ember.Component

这正是组件让你做的事情。事实上,W3C 目前正在制定自定义元素规范,这是一个好主意。

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

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

另外需要注意的是Ember.Component实际上是Ember.View(一个子类),但它是完全隔离的。其模板中的属性访问转到视图对象,并且操作也针对视图对象。无法访问周围context或外部的controller 所有上下文信息都被传入,而Ember.View则不是这种情况,它确实可以访问它的周围控制器,例如在视图中,您可以执行类似的操作this.get('controller'),这将为您提供当前与视图关联的控制器。

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

因此,除了组件允许您创建自己的标签之外的主要区别,并且在将来的某个时候,当自定义元素可用时,还可以在支持自定义元素的其他框架中迁移/使用这些组件,确实在某些时候是一个 ember 组件根据具体的实施情况,会使视图有些过时。

什么是一个常见的例子,我更喜欢在组件上使用视图,反之亦然?

遵循上述内容,这显然取决于您的用例。但根据经验,如果您需要在视图中访问它的周围控制器等,请使用Ember.View,但如果您想隔离视图并仅传递它需要工作的信息,使其与上下文无关并且更可重用,使用Ember.Component

希望能帮助到你。

更新

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

于 2013-09-03T13:49:02.177 回答
17

答案很简单:使用组件

根据 2013 年 8 月录制的培训视频,Yehuda Kats 和 Tom Dale(Ember 核心团队成员)告诉观众不要使用视图,除非您是框架开发人员。他们对 Handlebars 进行了许多增强并引入了组件,因此不再需要视图。视图在内部用于为 {{#if}} 和 {{outlet}} 之类的东西提供动力。

组件还非常模仿将构建到浏览器中的 Web 组件标准,因此可以轻松构建 Ember 组件有很多附带的好处。

2014-11-27 更新

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

资料来源:

于 2014-05-22T06:01:16.660 回答
5

就目前而言 -v2.x作为当前的稳定版本 - 视图已被完全弃用。据说正在从 Ember 2.0 API 中删除视图

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

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

如果你必须在 Ember 2.0 中使用视图,你可以使用ember-legacy-views插件,它将与 Ember 兼容直到 2.4 版本

所以,总而言之——组件是现在(视图被删除)和未来——它们也将取代控制器。请参阅可路由组件 RFC

于 2015-09-27T13:24:04.220 回答