8

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

$(window).bind('statechange', function(){
    // Loads the content representing the state via ajax
});

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

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

尽管如此,如果用户点击重新加载或稍后想要使用后退按钮等,我需要推送一个状态并更改 url 以反映新状态。

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

4

1 回答 1

7

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

window.stateChangeIsLocal = false;

您的statechange处理程序可能看起来像这样:

History.Adapter.bind(window,'statechange',function(){
    if (!window.stateChangeIsLocal) {
        someAjaxLoadFunction(History.getState().url);
    }
    else {
        window.stateChangeIsLocal = false;
    }
});

当您更改状态并且不想加载新状态的内容时,只需设置window.stateChangeIsLocaltrue;

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

于 2012-10-16T15:37:54.817 回答