刷新hasherJS / crossroadsJS路线

时间:2014-12-30 22:59:07

标签: javascript jquery handlebars.js crossroadsjs

我在由HandlebarsJS提供动力的SPA上使用crossroadsJS和hasherJS。回想起来,我可能应该把整个事情都建在Ember身上,但是在这个晚期重新开始并不明智。

我设置了哈希路线,根据点击的内容切换我的车把模板。我可以毫无问题地在路线之间前后移动。但是,如果我刷新页面,我总是会回到我的#/ home视图。我已经对window.onhashchange和window.onbeforeunload进行了一些研究,但这些似乎都没有解决问题。

我有一个非常具体的方式来处理我的观点。我有一个像这样构造的全局视图对象:

views.procedures = function (template) {

    this.initialize = function () {
        this.el = $('<div/>');
        this.el.attr('id', 'procedures');
        this.el.on('click', '.returned-list li a', this.toResults); // list of API objects by name
    };

    this.render = function () {
        var parts = {
            title: 'Procedures View',
        };
        this.el.html(template(parts));
        return this;
    };

    this.toResults = function () {
        cache.justClicked = $(this).attr('data-id');

        crossroads.addRoute('procedures/{name}', function () {
            api.endpoints.procedure(cache.justClicked); // constructed elsewhere
        });
    };

    this.initialize();
};

我之所以提到这一点,是因为我不能简单地在$(document).ready()$(window).onhashchange

中添加任何类型的哈希更改的JQuery侦听器

我已多次阅读hasherJS和crossroadsJS文档,但我无法想到解决刷新问题的任何事情。提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

我需要你提供更多信息,但我假设你正在做

var DEFAULT_HASH = 'home';

if (! hasher.getHash()) {
    hasher.setHash(DEFAULT_HASH);
}

这基本上是说您的默认路线始终是您的主路线,这就是您刷新当前路线时看到它的原因。请尝试以下方法:

var DEFAULT_HASH = 'home', url = hasher.getBaseURL();

if (hasher.getURL() === url) {
    hasher.setHash(DEFAULT_HASH);
}

这将检查您的基本网址(首次访问该网页时加载的网址),并将#/home路由附加到基本网址,以便您刷新当前查看的路线。

希望这有帮助。