ember.js-如何连接不同路线上的两个组件?

ember.js-如何连接不同路线上的两个组件?,ember.js,Ember.js,我有一个需要交互的父组件和子组件。通常我会使用。在这种情况下,这不起作用,因为这两个组件不在同一个路由模板上。父组件在一条路由上,子组件在子路由上,据我所知,我无法将上下文组件传递给{{outlet} Route | Component ---------------------------- route | parentComponent route.sub | childComponent 我目前看到两种选择: 将父组件逻辑移动到控制器 使用服务 我希望避免这两

我有一个需要交互的父组件和子组件。通常我会使用。在这种情况下,这不起作用,因为这两个组件不在同一个路由模板上。父组件在一条路由上,子组件在子路由上,据我所知,我无法将上下文组件传递给{{outlet}

Route       | Component
----------------------------
route       | parentComponent
route.sub   | childComponent
我目前看到两种选择:

将父组件逻辑移动到控制器 使用服务 我希望避免这两个选项,因为相同的父子组件可能会同时显示两次。在这两种情况下,我都看不到使用某种ID将正确的子级连接到正确的父级的其他选项,我不喜欢这样,因为我发现调试和读取都很困难

       Controller/Service
        ∧              |
        |              ∨
      action()      ?  or  ?  -> use of ID
        ∧           |      |
        |           ∨      ∨
child child       parent parent
还有别的办法吗?
谢谢你的帮助

简短的回答是,如果不使用您提供的两个选项,就不可能实现解决方案

我相信您提到的组件没有表现出正确的亲子关系,因为父母生活在一个根中,而孩子生活在另一条路径中

假设TemplateA-有{{comp-a}和{{{comp-b}}-这称为同级组件。此处,comp-b无法与comp-a通信,但可以通过向通用控制器/路由发送操作来实现

假设TemplateA-has{{comp-a}和comp-a内部has{{comp-b}-这称为父子组件,在这里子组件comp-b可以与父组件comp-a通信

组件将通过冒泡动作进行通信,动作逻辑应该在数据的源/所有者中实现

在您的情况下,答案取决于谁是数据的所有者

1.如果组件未在同一嵌套路由层次结构中使用,则我更愿意将数据所有权授予服务。 2.如果两个组件在相同的嵌套路由层次结构中使用,则我更愿意将数据所有权授予控制器/路由 即。, 父路由->将加载数据并将所需数据传递给父组件。
parent-route.sub->从父路由获取子组件所需的数据。您可以使用modelFor controllerformethod并传递子组件。现在,子组件可以从这里触发操作,直到应用程序路由通信。

简短回答是,如果不使用您提供的两个选项,就不可能实现解决方案

我相信您提到的组件没有表现出正确的亲子关系,因为父母生活在一个根中,而孩子生活在另一条路径中

假设TemplateA-有{{comp-a}和{{{comp-b}}-这称为同级组件。此处,comp-b无法与comp-a通信,但可以通过向通用控制器/路由发送操作来实现

假设TemplateA-has{{comp-a}和comp-a内部has{{comp-b}-这称为父子组件,在这里子组件comp-b可以与父组件comp-a通信

组件将通过冒泡动作进行通信,动作逻辑应该在数据的源/所有者中实现

在您的情况下,答案取决于谁是数据的所有者

1.如果组件未在同一嵌套路由层次结构中使用,则我更愿意将数据所有权授予服务。 2.如果两个组件在相同的嵌套路由层次结构中使用,则我更愿意将数据所有权授予控制器/路由 即。, 父路由->将加载数据并将所需数据传递给父组件。
parent-route.sub->从父路由获取子组件所需的数据。您可以使用modelFor controllerformethod并传递子组件。现在,子组件可以从这里触发操作,直到应用程序路由进行通信。

感谢您的详细反馈。我怀疑。在我的例子中,父组件和子组件不能处理相同的数据。他们只需要交流如何展示和装饰物品。我想我会选择控制器/路线选项。并在查询参数中尽可能多地移动。感谢您的详细反馈。我怀疑。在我的例子中,父组件和子组件不能处理相同的数据。他们只需要交流如何展示和装饰物品。我想我会选择控制器/路线选项。并在查询参数中尽可能多地移动。