首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在history.js中如何在不触发状态变化的情况下改变状态?

在history.js中如何在不触发状态变化的情况下改变状态?
EN

Stack Overflow用户
提问于 2012-07-13 17:15:41
回答 1查看 6K关注 0票数 8

我正在使用history.js,并且我有一个事件处理程序

代码语言:javascript
代码运行次数:0
运行
复制
$(window).bind('statechange', function(){
    // Loads the content representing the state via ajax
});

大多数内容更改都是在用户单击链接或按钮时由History.pushState([...])触发的。

但在某些情况下,内容更改由javascript直接管理(即通过更改、添加或删除DOM元素),并且不需要通过ajax加载表示新状态的内容。

尽管如此,我仍然需要按下一个状态并更改url以反映新的状态,如果用户点击reload或稍后想要使用后退按钮等。

所以我的问题是:如何在推送状态的同时避免在某些情况下加载内容?是否有一种可以传递给statechange事件处理程序的标志,或者我是否可以完全绕过它?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-16 23:37:55

我也想知道这个问题。我的决定是使用全局变量。例如,您可以将window.stateChangeIsLocal初始化为false:

代码语言:javascript
代码运行次数:0
运行
复制
window.stateChangeIsLocal = false;

您的statechange处理程序可能如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
History.Adapter.bind(window,'statechange',function(){
    if (!window.stateChangeIsLocal) {
        someAjaxLoadFunction(History.getState().url);
    }
    else {
        window.stateChangeIsLocal = false;
    }
});

当你改变状态并且不想加载新状态的内容时,只需将window.stateChangeIsLocal设置为true即可;

也许有一些更优雅的解决方案,但我找不到它们并使用它。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11467531

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档