我希望在用户转换时清除商店中的所有数据 在不同的路线上。
我想在任何路线上完成转换时明确这一点但是 不是子路线(我有嵌套路线)。
所以,在事件willTransition
中,我需要以某种方式检查过渡
route是父路由的子路由。在这种情况下,我想保留
来自商店的所有数据,否则我应该致电this.store.unloadAll('my-object');
由于
答案 0 :(得分:1)
你可以获得当前的路线名称,如
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="a"></div>
<div id="b"></div>
返回this.controllerFor('application').get('currentRouteName');
之类的内容。所以只要查看字符串中是否有photos.photo
,您就会知道它的子路由。如果您也需要,也可以检查父母。
答案 1 :(得分:1)
你已经接受了答案,但我不认为这是正确的解决方案(看起来非常hacky,你已经遇到了问题)。你真正想要做的是使用路线的deactivate
钩子。请参阅here。这个钩子的目的是在路由变化时执行代码。子路径更改时,父路径不会停用。
deactivate: function(){
this.store.unloadAll('my-object');
}
如果要卸载的对象在所有路径中都相同,请将deactivate
挂钩设为mixin,并使所有父路由扩展mixin。如果每个路由的对象不同,请手动为每个父路由写入deactivate hook
从您的评论中,您遇到了明显的异步问题。从技术上讲,您可以在所有parentRoutes的beforeModel
挂钩中执行相同的操作。它会产生相同的效果,它看起来像是缓存失效和重新获取。他们可能是更多的Ember数据方式,但我不知道,因为我不使用它。