Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.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
Ember.js:多个对象响应事件的首选方式是什么?_Ember.js_Action_Event Bubbling - Fatal编程技术网

Ember.js:多个对象响应事件的首选方式是什么?

Ember.js:多个对象响应事件的首选方式是什么?,ember.js,action,event-bubbling,Ember.js,Action,Event Bubbling,我有一个对象(选项),它嵌套在三层深处(项目->选项->选项)。选择一个选项后,所有三个对象都将更改其显示(选项将高亮显示,其他选项将不突出显示,项目将重新排列) 处理这一系列操作的首选方法是什么? -在本例中,每个对象响应该动作,然后通知该动作继续传播。这是有道理的,但我得到的印象是,这可能是一个非正统的方法,必须是一个共同的问题。这是一个好的选择吗 您有三种选择: 1.向上传播控制器层次结构。 当对象实际上位于模型端的层次结构或树中时,这是最简单和最好的选择,因为这样每个对象的控制器都有一

我有一个对象(选项),它嵌套在三层深处(项目->选项->选项)。选择一个选项后,所有三个对象都将更改其显示(选项将高亮显示,其他选项将不突出显示,项目将重新排列)

处理这一系列操作的首选方法是什么?

  • -在本例中,每个对象响应该动作,然后通知该动作继续传播。这是有道理的,但我得到的印象是,这可能是一个非正统的方法,必须是一个共同的问题。这是一个好的选择吗

    • 您有三种选择:

      1.向上传播控制器层次结构。 当对象实际上位于模型端的层次结构或树中时,这是最简单和最好的选择,因为这样每个对象的控制器都有一个对父对象控制器的显式引用

      2.向上传播路由层次结构 当视图层次结构不一定对应于模型中的树结构,而是语义结构时,这是最佳选择。如果您认为相关对象的语义排列在将来可能会发生变化,那么这是一个更好的选择。但是,您仍然假设存在层次结构

      3.让第一个处理程序成为“知道”对象如何相关的最顶层路由, 该处理程序将事件发送到必要的控制器。 当一组特定视图中的对象之间的关系是语义关系,而不一定是层次关系,并且您认为路由/视图可能在应用程序开发过程中移动时,此选项是最佳选择。这种情况的最好例子是“负面”事件——例如,
      deselect


      你可以随时混合这些策略。我发现,如果事件倾向于向上返回到必要的控制器,而不是在我的控制器中有大量的
      需求,那么重构就更容易了。

      链接的示例()看起来很合理,只是接收者被显式选择了-它不一定会沿着自然层次结构传播。非常好,谢谢你,迈克尔。要澄清的是,事件是否总是通过
      send('eventNamne')
      进行传播,如上面的直觉像素示例所示?我有点期待Ember会有一个
      continueActionPropagation()
      函数,或者一些沿着默认路径继续操作的东西。你的建议“如果事件倾向于上升到某个路径并返回到必要的控制器,重构会更容易”非常有意义。您可以发布一些示例代码来说明这种方法以及如何识别“知道”关系的路由吗?您可以显式地
      发送
      返回true
      ,以继续传播到同名的操作。实际上,如果您不返回任何内容,操作将传播——要停止传播,请
      返回false
      ,或者使用标准的jquery
      event.stopPropagation()
      我手头上没有示例代码,但我的合同很快就要结束了,所以我可能会花时间写一篇关于这个想法的博客文章。