Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Ember.js中的视图与组件_Javascript_Ember.js_Handlebars.js - Fatal编程技术网

Javascript Ember.js中的视图与组件

Javascript Ember.js中的视图与组件,javascript,ember.js,handlebars.js,Javascript,Ember.js,Handlebars.js,我正在学习ember.js,并试图理解视图和组件之间的区别。我认为这两者都是制作可重用组件的一种方式 从恩伯的网站上查看: 在Ember.js中创建视图通常仅出于以下原因: -当您需要复杂地处理用户事件时 -当您想要创建一个可重用组件时 从Ember的组件网站: 组件是一个自定义HTML标记,您可以使用JavaScript实现其行为,并使用Handlebar模板描述其外观。它们允许您创建可重复使用的控件,以简化应用程序的模板 那么视图和组件之间的主要区别是什么?我更喜欢使用视图而不是组件,反之亦

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

从恩伯的网站上查看:

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

从Ember的组件网站:

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

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

当前仅限于W3C为您创建的标记。但是,如果您想定义自己的特定于应用程序的HTML标记,然后使用JavaScript实现它们的行为?事实上,你不能用一只手来做这件事

这正是组件所允许的。事实上,W3C目前正在开发该规范,这是一个非常好的想法

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

这对我们来说非常重要,我们正在与标准机构密切合作,以确保我们的组件实现符合web平台的路线图

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

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

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

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

遵循上述步骤,这显然取决于您的用例。但根据经验,如果您需要在视图中访问其周围的控制器等,请使用,但如果您希望隔离视图并仅传递其工作所需的信息,使其不受上下文影响且更易于重用,请使用

希望能有帮助

更新
随着的出版,现在鼓励您在大多数情况下使用组件而不是视图。

答案很简单:使用组件

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

组件还与浏览器中构建的Web组件标准非常相似,因此构建舒适的Ember组件有很多好处

更新2014-11-27

现在更重要的是使用组件而不是视图,因为当输入路由时,Ember 2.0将使用可路由组件,而不是控制器/视图。为了让你的应用程序经得起未来的考验,最好远离视图

资料来源:

  • 通往灰烬2.0的道路:
  • 未来证明您的余烬1.x代码:
  • 没有视图,只有组件(Tom Dale):

目前-
v2.x
是当前稳定的版本-视图已被完全弃用

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

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

如果您必须在Ember 2.0中使用视图,则可以使用插件,该插件将在版本2.4之前与Ember兼容


总之,组件是现在(视图被移除)和未来,它们也将取代控制器。请参阅。

我唯一关心的是组件何时变得复杂。我还不知道如何将逻辑部分与渲染部分分开。在常规视图中,您有这种分离,可以将逻辑放入控制器中,但对于组件,我倾向于说您最终会遇到一个非常复杂的,甚至可能是巨大的混乱。您知道是否可以为组件定义一个专用控制器吗?或者组件只是不用于管理复杂的图形元素。@sly7_7,是的,我明白你的意思。但我认为组件是一个黑匣子,它的行为只基于它传入的数据。是的,这取决于它的功能,很快就会变成一团乱麻。一个专用的控制器是绝对有意义的,它的工作方式是如果组件可以成为逻辑注入它,但据我所知,组件在设计上不是ember容器的一部分,我想,但它可能会改变