2014-12-30 1 views
2

Я использую crossroadsJS и hasherJS на SPA, оборудованный ручками JS. Оглядываясь назад, я, вероятно, должен был построить все это на Ember, но в последнее время нецелесообразно начинать.Обновить hasherJS/crossroadsJS маршруты

У меня есть хэш-маршруты, которые меняют мои шаблоны рулей внутри и снаружи на основе того, что было нажато. Я могу перемещаться назад и вперед между маршрутами без проблем. Однако, если я обновляю страницу, я всегда возвращаюсь к своему #/домашнему виду. Я провел некоторое исследование в 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(); 
}; 

Я говорю об этом, потому что я не могу просто добавить в JQuery слушателей для любого типа изменений хэша в $(document).ready() или $(window).onhashchange

Я прочитал как hasherJS, так и crossroadsJS, несколько раз, но я не могу ни о чем думать, чтобы решить проблему обновления. Заранее благодарю за любую помощь.

ответ

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

Это будет проверять, чтобы увидеть, что ваш базовый URL является (тот, который загружается при первом посещении страницы), и добавить #/home маршрут к базовому URL, что позволяет обновить ваше настоящее время рассматривается маршрут.

Надеюсь, это поможет.