Javascript 余烬-当在下一个路由的didTransition钩子中设置属性时,上一个路由中的观察者将激发

Javascript 余烬-当在下一个路由的didTransition钩子中设置属性时,上一个路由中的观察者将激发,javascript,ember.js,Javascript,Ember.js,在我的索引路由中,我有一个观察者,在会话服务中设置用户对象时触发一个操作,如下所示。这工作正常-控制台记录“已触发索引路由观察器”并触发操作 路线/索引 会话:Ember.inject.service(), sendTheAction:函数(){ log('index route observer fired'); 发送('checkLicense'); }.obsers('session.user'), 行动:{ checkLicense:function(){ if(this.get('s

在我的索引路由中,我有一个观察者,在会话服务中设置用户对象时触发一个操作,如下所示。这工作正常-控制台记录“已触发索引路由观察器”并触发操作

路线/索引

会话:Ember.inject.service(), sendTheAction:函数(){ log('index route observer fired'); 发送('checkLicense'); }.obsers('session.user'), 行动:{ checkLicense:function(){ if(this.get('session.user.email)){ //获取用户的电子邮件并发送AJAX请求。 } },
}观察者仍然开火,这是预期的行为。原因是,;路线为单身人士;它们不会在转换时被破坏。所以如果您在路由中定义了一个观察者,并观察可能由其他路由、组件、控制器等更新的值,那么您的观察者仍然可以工作!!!所以在单例(控制器、服务、路由测试等)中使用观察器时要小心

我创建了一个显示您提到的确切案例的。这里的有效问题实际上是“为什么
index.js
中的
send
操作被委托给另一个路由?”下面是来自Ember.js api的示例。它在
send
方法定义中表示“向路由器发送一个操作,路由器将把它委托给当前活动的路由…”。所以发生错误;因为当前活动路由不再是
索引
;找不到操作

所以,;你能做什么?为什么要在
index.js
中向自己抛出一个动作?只需进行正常的函数调用!!!如果你仍然需要行动;您还可以从操作中调用相同的函数。为了明白我的意思,请看下面的例子


综上所述,;无论从属密钥是否更新,单例中的观察者都将工作!希望现在一切都清楚了。致以最良好的祝愿。

观察者仍然开火,这是预期的行为。原因是,;路线为单身人士;它们不会在转换时被破坏。所以如果您在路由中定义了一个观察者,并观察可能由其他路由、组件、控制器等更新的值,那么您的观察者仍然可以工作!!!所以在单例(控制器、服务、路由测试等)中使用观察器时要小心

我创建了一个显示您提到的确切案例的。这里的有效问题实际上是“为什么
index.js
中的
send
操作被委托给另一个路由?”下面是来自Ember.js api的示例。它在
send
方法定义中表示“向路由器发送一个操作,路由器将把它委托给当前活动的路由…”。所以发生错误;因为当前活动路由不再是
索引
;找不到操作

所以,;你能做什么?为什么要在
index.js
中向自己抛出一个动作?只需进行正常的函数调用!!!如果你仍然需要行动;您还可以从操作中调用相同的函数。为了明白我的意思,请看下面的例子


综上所述,;无论从属密钥是否更新,单例中的观察者都将工作!希望现在一切都清楚了。致以最良好的祝愿。

为什么要在index.js中向自己抛出一个动作?只需进行正常的函数调用!!!我想这就是重点。我现在完全明白了。谢谢你的回答,还有解决方法。为什么要在index.js中对自己抛出一个动作?只需进行正常的函数调用!!!我想这就是重点。我现在完全明白了。谢谢你的精彩回答和解决方法。