Answers:
一个Ember.View目前仅限于由W3C的为您创建的标签。但是,如果您想定义自己的特定于应用程序的HTML标记,然后使用JavaScript实现它们的行为?您实际上无法使用Ember.View做到这一点。
这正是组件允许您执行的操作。实际上,W3C目前正在制定“ 自定义元素”规范是一个好主意。
Ember的组件实现尽可能与Web组件规范保持紧密联系。一旦自定义元素是在浏览器中广泛应用,你应该能够轻松地将灰烬组件迁移到W3C标准,让他们可以通过其他框架可用,以及已经采取了新的标准。
这对我们非常重要,因此我们正在与标准机构紧密合作,以确保我们的组件实现与Web平台的路线图相匹配。
还要注意的重要一点是,Ember.Component实际上是Ember.View(一个子类),但是它是完全隔离的。其模板中的属性访问转到视图对象,并且操作也以视图对象为目标。无法访问周围context
或外部的controller
所有上下文信息,这与Ember.View的情况不同,它确实可以访问其周围的控制器,例如,在视图内部可以执行this.get('controller')
以下操作:当前与视图关联的控制器。
那么视图和组件之间的主要区别是什么?
那么,除此之外组件的主要差别让你创建自己的标签,并在当未来某个时间点自定义元素都可以也迁移/使用,将支持自定义元素其他框架的组成部分,确实在某些时候灰烬成分视具体实现情况而定,视图将有些过时。
在我希望使用组件之上的视图,反之亦然的情况下,又有什么常见的例子呢?
遵循以上内容,这显然取决于您的用例。但是根据经验,如果您需要在视图中访问其周围的控制器等,请使用Ember.View,但是如果您想隔离视图并仅传递需要它进行工作的信息以使其与上下文无关而且更可重用,请使用Ember.Component。
希望能帮助到你。
{{view.xxxx}}
在组件中的工作原理与在视图中相同。
答案很简单:使用组件
根据2013年8月录制的培训视频,Yehuda Kats和Tom Dale(Ember核心团队成员)告诉观众,除非您是框架开发人员,否则不要使用视图。他们对车把进行了很多增强,并引入了组件,因此不再需要视图。内部使用视图来增强{{#if}}和{{outlet}}之类的功能。
组件还紧密模仿将被内置到浏览器中的Web组件标准,因此舒适地构建Ember组件有很多附带好处。
更新2014-11-27
现在使用组件而不是视图更为重要,因为输入路由时,Ember 2.0将使用可路由组件,而不是控制器/视图。为了将来验证您的应用,最好远离Views。
资料来源:
就目前而言- v2.x
作为当前的稳定版本-视图已被完全弃用。据说已经从Ember 2.0 API中删除了视图。
因此,{{view}}
在Ember 2.0中使用关键字将触发一个断言:
断言失败:使用
{{view}}
或基于它的任何路径在Ember 2.0中已被删除
如果必须在Ember 2.0中使用视图,则可以使用ember-legacy-views插件,该插件在版本2.4之前与Ember兼容。
因此,总而言之-组件是当前(视图已删除)和将来-它们还将替换控制器。请参阅路由组件RFC。