从 Ember 对象过渡到路由的操作

Transition to route's action from Ember object

我是 ember 的新手。我有一个现有的 Ember 应用程序,我需要在其中实现一个功能。我有一个 Ember 对象如下

`import Ember from 'ember'`

CallService = Ember.Object.extend

 ... other code here

 _updateConnectedLeadId: (->
    console.log "Do i get here??"

    **pass the route action here**

  ).observes('some_other_here')
`export default CallService`

很遗憾,我无法将整个代码放在这里。

我的路线看起来像

ApplicationRoute = Ember.Route.extend
  actions:
    showLead: ->
      console.log data
      console.log "did i get here?"
      @transitionTo('dashboard')

`export default ApplicationRoute`

我尝试在我的方法中使用 @send('showLead')@sendAction('showLead'),但没有成功。

我的主要目的是在 console.log "Do i get here??" 显示后进行转换。我不确定我在这里是否走对了路。

我也试过直接使用 @transitionTo('dashboard')@transitionToRote('dashboard') 但它会抛出错误。

我在这上面卡了一天,一头雾水。

如有任何指导和帮助,我将不胜感激。谢谢

您遇到的问题是您正试图从 Ember.Object 命名呼叫服务中触发路由操作或触发转换。您创建的代码不清楚您的自定义对象的创建位置;由于更改对象的 属性 更新等而触发观察者的位置。

尽管如此,我还是尝试为您提供一个有效的 example。如果你打开 twiddle,你会看到我在 index.js 路由中创建了一个 my-object 实例,并将它作为 model 传递给 my-component。当您单击 my-component.hbs 内的按钮时。 my-object 个实例 dummyVariable 被切换并且 my-object 中的观察者执行。这里棘手的部分是我将 index 路由本身作为 ownerRoute 属性 传递给 my-object 实例;这样我就可以从 my-object.js 中使用

触发 index 路由的 dummyAction
ownerRoute.send('dummyAction');

以便执行相关操作并执行到 my-route 的转换。虽然,我相信这可能会解决您的问题;我对设计不太满意。我不认为,这是 Ember.Objects 了解路由、操作、控制器等的好方法。我认为正确的方法是从这个构造中观察对象的相关属性,并自行执行必要的操作。此外,您可能会考虑创建 service 而不是对象,并将服务直接注入您的路由,而不是创建 class 扩展 Ember.Object 的实例。如果你必须从 Ember.Object 扩展,你可以在需要时使用 instance-initializer 将相关的路由、控制器等注入特定对象 class 的实例。

总之,大家多多看看,有需要的再多问。如果可以的话,我很乐意提供帮助。