mmRouter icon indicating copy to clipboard operation
mmRouter copied to clipboard

浏览器返回上一页面时,当前页面状态&数据清理问题

Open RockNHawk opened this issue 10 years ago • 6 comments

现在路由只有请求开始时的数据初始化 callback,但是页面跳转增多后,我返回上一页面后,就会出现刚才的页面状态没有清理的问题! 而且我认为这应该在离开刚才页面的时候进行处理,即路由除了有请求开始时的 callback,时候有离开页此页面时的 callbakc,以清理一些状态!

RockNHawk avatar Mar 03 '15 01:03 RockNHawk

页面状态应该是放在VM中的

RubyLouvre avatar Mar 03 '15 01:03 RubyLouvre

@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();
    }
});

RockNHawk avatar Mar 03 '15 05:03 RockNHawk

avalon.router.get - 这个的功能比较弱,请使用mmState.js,里面提供了unload等接口

gogoyqj avatar Mar 03 '15 08:03 gogoyqj

@gogoyqj 哦?之前没发现,谢谢告知!

不过 state 的问题是,它要求我必须传 views,而且如果我创建一个1级以上的 path,它要求我必须定义上级 state,其实我只是想把 path 按照层级划分,上级目前未必就有这个 state,写个空的在那里又不太爽,而且还必须传 views,我其实没有 views。。。

我只是需要用到 route 的 callback 和 leave 时的回调。

RockNHawk avatar Mar 03 '15 08:03 RockNHawk

我后续对mmState进行一些剥离,用来健壮router,而不用过分依赖dom,但是现在只能这么用吧

gogoyqj avatar Mar 03 '15 08:03 gogoyqj

@gogoyqj 期待后续版本。感谢你的工作。 整个 mmRouter 和 mmState 用起来还是不够舒爽,尤其是 mmState。

RockNHawk avatar Mar 29 '15 05:03 RockNHawk