浏览器返回上一页面时,当前页面状态&数据清理问题
现在路由只有请求开始时的数据初始化 callback,但是页面跳转增多后,我返回上一页面后,就会出现刚才的页面状态没有清理的问题! 而且我认为这应该在离开刚才页面的时候进行处理,即路由除了有请求开始时的 callback,时候有离开页此页面时的 callbakc,以清理一些状态!
页面状态应该是放在VM中的
@RubyLouvre 状态信息确实是在 VM 里面控制的,不过现实情况会比较复杂,具体场景如下: 页面顶部是模拟 App 的导航条,返回按钮在上面
#!/list 页面是个列表,点击列表页里的项,打开明细 #!/detail/id 打开明细页面时,顶部导航条的返回按钮的 href 是#!/list ,同时 ms-click 事件里面操调用 VM.close,把 detail Model close 掉,页面会更新。
问题来了,如果用户不是点击导航条上的“返回”按钮,而是浏览器的回退键,那么 detail 的 VM.close 不会被调用!这样页面状态就不正确了!除非在 #!/list 页面 的 router callback 里面去操作 detail 的 VM.close ,但是这样显然是不合理的。
我现在是修改了 mmRouter 的源码,增加了页面离开的 leave 回调,一个 route 既有 callback,也可以有 leave 回调函数在离开时清理当前页面状态数据。
avalon.router.get("/userNotification/newFlowedQuestionDetail/:id", function () {
topNavbar.toggleState(topNavbar.userNotificationQuestionDetailState);
明细.openNewFlowedQuestion(this.params.id);
}, {
leave: function () {
明细.close();
}
});
avalon.router.get - 这个的功能比较弱,请使用mmState.js,里面提供了unload等接口
@gogoyqj 哦?之前没发现,谢谢告知!
不过 state 的问题是,它要求我必须传 views,而且如果我创建一个1级以上的 path,它要求我必须定义上级 state,其实我只是想把 path 按照层级划分,上级目前未必就有这个 state,写个空的在那里又不太爽,而且还必须传 views,我其实没有 views。。。
我只是需要用到 route 的 callback 和 leave 时的回调。
我后续对mmState进行一些剥离,用来健壮router,而不用过分依赖dom,但是现在只能这么用吧
@gogoyqj 期待后续版本。感谢你的工作。 整个 mmRouter 和 mmState 用起来还是不够舒爽,尤其是 mmState。