javascript - registerhelper - Ember.js中的视图与组件




mustache (2)

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

从Ember的网站上查看:

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

从Ember的组件网站:

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

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


Ember.View

Ember.View目前仅限于由W3C为您创建的标签。 但是,如果您想定义自己的特定于应用程序的HTML标签,然后使用JavaScript实现其行为? 你不能用Ember.View来做到这Ember.View

Ember.Component

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

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

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

另外需要注意的是, Ember.Component实际上是一个Ember.View (一个子类),但它是完全孤立的 。 其模板中的属性访问转到视图对象,动作也针对视图对象。 没有对周围context或外部controller访问权限, 所有上下文信息都被传入 ,而Ember.View并不是这种情况,而Ember.View确实可以访问它的周围控制器,例如在视图内部,你可以做类似this.get('controller') ,它会给你当前与视图关联的控制器。

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

因此,除了组件之外的主要区别是您可以创建自己的标签,并且在自定义元素可用时的某个时间点,也可以在支持自定义元素的其他框架中迁移/使用这些组件,实际上在某些时候,一个支持组件的组件将根据具体的实施情况而使视图稍微过时。

什么是我喜欢使用组件视图的常见示例,反之亦然?

以上这些依赖于你的用例。 但作为一个经验法则,如果您需要在您的视图中访问其周围的控制器等,请使用Ember.View ,但是如果您想要隔离视图并仅传递其需要的信息,使其与上下文无关和更多的可重用,使用Ember.Component

希望能帮助到你。

更新

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


现在看来 - v2.x是当前的稳定版本 - 视图已被完全弃用。 据说从Ember 2.0 API中删除了视图

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

声明失败:在Ember 2.0中删除了使用{{view}}或其基于它的任何路径

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

因此,总结 - 组件是现在(视图被删除)和未来 - 他们也将取代控制器。 请参阅可路由组件RFC