路线处理程序中的动作

时间:2018-12-24 05:22:32

标签: ember.js

我在Ember中完成了几个项目,所以我并不陌生。在大约一年前的上一个项目中,我使用ember-route-action-helper插件将我所有的动作放在路由中,而不是创建控制器。我最近开始了另一个项目,并发现我可以在不使用此插件的情况下处理路线中的操作。

我确实在Google上进行了搜索,但没有任何线索。这是Ember中新增的一项功能吗?在路由而不是控制器中处理动作是否有任何缺点?此外,控制器现在有什么用?

谢谢

1 个答案:

答案 0 :(得分:2)

我不认为closure-action正在使用纯粹的action辅助路线。似乎唯一起作用的是元素空间中的动作。要了解两种动作类型之间的区别,请阅读此出色的blog post

我的意思是;如果您声明您的操作如下:

<button onclick={{action 'dummyAction'}}>Push</button>,并在action中定义您的route;出现错误指示

EmberError {stack: "Error: Assertion Failed: An action named 'dummyAct…/ember-source@3.4.3/dist/ember.debug.js:15626:28)", description: undefined, fileName: undefined, lineNumber: undefined, message: "Assertion Failed: An action named 'dummyAction' was not found in (generated index controller)"

但是,如果您在元素空间中使用操作而不是关闭操作;我的意思是:

<button {{action 'dummyAction'}}>Push</button>似乎从Ember 3.1开始工作。然而;您是正确的,因为Ember发行说明或其他地方未正确记录该文件。

请参阅我为这个问题准备的twiddle,作为我上面解释的摘要。总结一下;如果您不使用closure actions,那么route似乎仍然无法在route-action-helper上使用。

关于控制器使用的问题;查看Ember guide的建议:

  
      
  • 我们要传递动作或变量以与路线的子组件共享
  •   
  • 我们有一个计算属性,取决于模型挂钩的结果
  •   
  • 我们需要支持查询参数
  •   

他们建议在控制器内定义动作;另请参见ember-route-helper插件的github page中提到的警告。他们说

  

您可能不需要使用此插件。如果没有此插件,您将完全可以使用该插件的大多数用例。阅读以下博客文章以获取更多信息:Ember Best Practices: What are controllers good for?

请参见Ember guide for version 2.2.,其中指出:

  

控制器非常类似于组件,以至于将来   版本的Ember,控制器将完全替换为   组件。目前,组件无法路由到,但是当   此更改后,建议将所有控制器替换为   组件。

     

因此,现代Ember应用程序不经常使用   控制器。

但是;在将来的版本中,他们决定保留controller作为框架的核心结构之一。从而;我建议坚持使用最新指南,并在controller而不是route内定义操作,现在不再使用ember-route-action-helper插件。