如何直接跳回历史记录,我不希望go()函数多次调用back()

时间:2013-06-24 11:07:36

标签: html5 history.js

我在history.js的顶部使用staterouter.js。当我返回多个页面时,history.js在内部调用back()相应的次数 - 这在我的情况下是不可取的,因为我有一个处理程序,每次调用back(()

History.go = function(index,queue){
    //History.debug('History.go: called', arguments);

    // Prepare
    var i;

    // Handle
    if ( index > 0 ) {
        // Forward
        for ( i=1; i<=index; ++i ) {
            History.forward(queue);
        }
    }
    else if ( index < 0 ) {
        // Backward
        for ( i=-1; i>=index; --i ) {
            History.back(queue);
        }
    }
    else {
        throw new Error('History.go: History.go requires a positive or negative integer passed.');
    }

    // Chain
    return History;
};

这种行为有什么办法吗?

1 个答案:

答案 0 :(得分:0)

我创建了自己的函数,当我需要上述行为时,我会调用它。它需要我自己的应用程序层实现才能忽略除了其中一个abs(qty)历史记录运动之外的所有路由回调。

goDirect = function (qty) {
    if (qty === -1 || qty === 1) {
        router.go(qty);
        return;
    }

    ignoreNavigations = Math.abs(qty) - 1;
    router.go(qty);
};

以下代码用作路由处理程序的第一行:

if (ignoreNavigations-- > 0) return;

我确实尝试在调用go(abs(qty)-1)时将RouteEnabled标志设置为false,然后将标志设置回true并调用最终go(-1),但是看起来响应导航异步发生,因此我将实现更改为上面的代码,而不是尝试使用计时器,并得到所有凌乱。