EmberJS清洁商店在不同路线上转换时

时间:2015-05-13 15:57:35

标签: ember.js

我希望在用户转换时清除商店中的所有数据 在不同的路线上。

我想在任何路线上完成转换时明确这一点但是 不是子路线(我有嵌套路线)。

所以,在事件willTransition中,我需要以某种方式检查过渡 route是父路由的子路由。在这种情况下,我想保留 来自商店的所有数据,否则我应该致电this.store.unloadAll('my-object');

由于

2 个答案:

答案 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)

你已经接受了答案,但我不认为这是正确的解决方案(看起来非常h​​acky,你已经遇到了问题)。你真正想要做的是使用路线的deactivate钩子。请参阅here。这个钩子的目的是在路由变化时执行代码。子路径更改时,父路径不会停用。

deactivate: function(){
    this.store.unloadAll('my-object');
}

如果要卸载的对象在所有路径中都相同,请将deactivate挂钩设为mixin,并使所有父路由扩展mixin。如果每个路由的对象不同,请手动为每个父路由写入deactivate hook

从您的评论中,您遇到了明显的异步问题。从技术上讲,您可以在所有parentRoutes的beforeModel挂钩中执行相同的操作。它会产生相同的效果,它看起来像是缓存失效和重新获取。他们可能是更多的Ember数据方式,但我不知道,因为我不使用它。