Как обновить страницу в магистральном приложении - PullRequest
27 голосов
/ 18 января 2012

Я использую магистраль для создания своего веб-приложения.

В настоящее время я сталкиваюсь с проблемой, из-за которой, если я нахожусь на домашней странице, я не могу обновить ту же страницу, просто снова нажав кнопку «Домой».

Я считаю, что это ограничение, предоставляемое магистралью (не перезагружает страницу, если вызывается тот же URL-адрес)

enter image description here

Есть ли способ обойти это? Чтобы я мог инициировать перезагрузку страницы, когда я снова нажимаю кнопку «Домой», то есть снова вызываю тот же URL?

Ответы [ 13 ]

38 голосов
/ 23 июля 2013

Вы ищете Backbone.history.loadUrl.Из аннотированного источника :

Попытка загрузить текущий фрагмент URL.Если маршрут успешно совпадает, возвращается true.Если ни один из заданных маршрутов не соответствует фрагменту, возвращается false.

Итак, для простой ссылки обновления вы можете добавить следующее событие в Backbone.View:

events: {
  'click a#refresh': function() {
    Backbone.history.loadUrl();
    return false;
  }
}
29 голосов
/ 24 января 2012

Глядя на источник backbone.js, кажется, что это невозможно по умолчанию, поскольку он реагирует только на изменение URL-адреса.А поскольку щелкнув по той же ссылке, вы не будете вызывать событие изменения.

Код в Backbone.History:

$(window).bind('hashchange', this.checkUrl);

Вам придется самостоятельно обрабатывать изменения.Вот что я сделал:

$('.nav-links').click(function(e) {
    var newFragment = Backbone.history.getFragment($(this).attr('href'));
    if (Backbone.history.fragment == newFragment) {
        // need to null out Backbone.history.fragement because 
        // navigate method will ignore when it is the same as newFragment
        Backbone.history.fragment = null;
        Backbone.history.navigate(newFragment, true);
    }
});
7 голосов
/ 09 июля 2012

В случае, если вы хотите перезагрузить всю страницу с желаемым видом.Это может сделать деньги на кнопку домой.Преимущество будет в том, что он обновит память.

Перейдите на любой маршрут без загрузки (без 'true') и затем перезагрузите

Backbone.history.navigate('route/goes/here');
window.location.reload();
6 голосов
/ 11 мая 2014

Решением является backbone.history.loadUrl.

Функция обработки кликов вашей кнопки «Домой» (если дом является корнем / вашего WebApp) должна быть:

myAppRouter.navigate('');
Backbone.history.loadUrl();
2 голосов
/ 27 апреля 2012

Мне нужно было «обновить» мою страницу при изменении ориентации, потому что не все мои css media-запросы для портретного режима выполнялись правильно по умолчанию. Вот что я в итоге сделал:

Backbone.history.fragment = null;
Backbone.history.navigate(document.location.hash, true); 

Конечно, для полноты этого ответа он был заключен в некоторый код обработки изменения ориентации:

window.addEventListener('orientationchange', function () {
    Backbone.history.fragment = null;
    Backbone.history.navigate(document.location.hash, true); 
}, false);
1 голос
/ 26 марта 2014

Вы можете легко обновить страницу, используя следующий подход:

@win_loc = window.location.toString().replace("#","")
Backbone.history.redirectTo(@win_loc)
1 голос
/ 04 июля 2013

Вы также можете просто сделать бессмысленное изменение в URL, добавив случайное число в конец:

var url = $(this).attr('href') + '?rand=' + Math.floor(Math.random() * 1000);
Backbone.history.navigate(url, true);

Это особенно полезно для IE, поскольку он не будет запрашивать новые данные через вызов AJAX, если URL-адрес не изменился.

0 голосов
/ 27 ноября 2014

Вот мой любимый подход:

 if (!Backbone.history.navigate(urlPath, true)) {
      Backbone.history.loadUrl();
 }
0 голосов
/ 19 ноября 2013

Работает с

 myBackboneRouter.navigate("users", {trigger: true})
0 голосов
/ 09 сентября 2013

Чтобы предоставить многократно используемый фрагмент кода, я дополнил Backbone.View вспомогательным методом для повторного использования его везде, где нам необходимо перезагрузить ту же страницу, несмотря на ограничения маршрутизатора Backbone.файл или любое другое правильное местофункция обновления страницы, поскольку помощник refreshPage будет доступен через цепочку прототипов

events: {
    'click #whateverId': 'refreshPage', 
}

Поскольку нам не нужно менять тег, это более чистое решение, которое сэкономит некоторыестандартный код

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...