视图与Ember.js中的组件
我正在学习ember.js,我想了解视图和组件之间的区别。 我认为这是制造可重用组件的一种方式。
从Ember的网站上查看:
Ember.js中的视图通常仅由于以下原因而创build:
– 当你需要复杂的用户事件处理
– 当你想创build一个可重用的组件
从Ember的组件网站:
组件是一个自定义的HTML标记,您的行为使用JavaScript实现,其外观使用Handlebars模板描述。 它们允许您创build可重用的控件 ,以简化应用程序的模板。
那么视图和组件之间的主要区别是什么? 什么是一个常见的例子,我宁愿使用一个组件的视图,反之亦然?
Ember.View
Ember.View目前仅限于由W3C为您创build的标签。 但是,如果你想定义自己的应用程序特定的HTML标签,然后使用JavaScript实现他们的行为? 用Ember.View不能做到这一点 。
Ember.Component
这正是组件允许你做的事情。 实际上,W3C目前正在开发自定义元素规范,这是个好主意。
Ember的组件实现尝试尽可能地与Web组件规范保持一致。 一旦自定义元素在浏览器中广泛使用,您应该能够轻松地将您的Ember组件迁移到W3C标准,并让其他框架也可以使用这些新标准。
这对我们非常重要,我们正在与标准组织密切合作,以确保我们的组件实现与Web平台的路线图相匹配。
另外需要注意的是, Ember.Component实际上是一个Ember.View (一个子类),但它是完全孤立的 。 其模板中的属性访问转到视图对象,操作也针对视图对象。 有没有访问周围的context
或外部controller
所有上下文信息传入 ,而不是Ember.View的情况下,确实有权访问它的周围的控制器,例如在视图内,你可以做这样的事情。 this.get('controller')
,它会给你当前与视图相关的控制器。
那么视图和组件之间的主要区别是什么?
所以,除了组件之外的主要区别,你可以创build自己的标签,并且在将来的某些时候,当自定义元素可用时,也可以在其他支持自定义元素的框架中迁移/使用这些组件,实际上,根据具体的实施情况,会有些陈旧。
什么是一个常见的例子,我宁愿使用一个组件的视图,反之亦然?
以上这些依赖于你的用例。 但作为一个经验法则,如果你需要在你的视图中访问它的周围的控制器等使用一个Ember.View ,但如果你想孤立视图,并只传递它需要工作的信息,使其上下文无关和更多的可重用,使用Ember.Component 。
希望能帮助到你。
更新
随着Road to Ember 2.0的发布,您现在被鼓励在大多数情况下使用Components而不是Views。
答案很简单: 使用组件
根据2013年8月录制的培训video,Yehuda Kats和Tom Dale(Ember核心团队成员)告诉观众,除非您是框架开发人员,否则不会使用视图。 他们对把手进行了大量的改进,并引入了组件,所以视图不再需要。 视图在内部用来提供诸如{{#if}}和{{outlet}}之类的function。
组件也非常模仿将被构build到浏览器中的Web组件标准,所以在构buildEmber组件时有很多好处。
更新2014-11-27
现在更重要的是使用组件而不是视图,因为input路由时,Ember 2.0将使用可路由组件,而不是控制器/视图。 为了将来validation您的应用程序,最好远离视图。
资料来源:
- Ember 2.0之路: https : //github.com/emberjs/rfcs/pull/15
- 面向未来的Ember 1.x代码validation: https : //gist.github.com/samselikoff/1d7300ce59d216fdaf97
- 没有看法,只有组件(Tom Dale): https : //speakerdeck.com/tomdale/ember-2-dot-0-in-practice? slide = 27
就目前而言 – v2.x
是当前的稳定版本 – 视图已被完全弃用。 据说从Ember 2.0 API中删除了视图 。
所以,在Ember 2.0中使用{{view}}
关键字会触发一个断言:
断言失败:使用
{{view}}
或基于它的任何path在Ember 2.0中已被删除
如果您必须在Ember 2.0中使用视图,则可以使用ember-legacy-views插件,该插件将与Ember兼容,直到版本2.4 。
所以,总结 – 组件是现在(意见被删除)和未来 – 他们也将取代控制器。 请参阅可路由组件RFC 。