Ember Force Route для обновления страницы

В моем приложении мне нужно, чтобы некоторые разделы моего приложения обновлялись при переходе. Я подобрался довольно близко, создав другой Location типа я звонюpassthrough а затем разделить маршруты в отдельный файл. passthrough опция местоположения, по существу, пытается заменить любое, где это историческое состояние было ранее выдвинуто, и вместо этого просто location.href = новый pathname, Проблема, с которой я столкнулся сейчас, заключается в том, что, хотя это более или менее работает, маршрутизатор уже запустил цикл выполнения, и представление отображается за доли секунды до его обновления. Не очень знаком с тем, как управлять циклом выполнения, поэтому подумал, что, возможно, кто-то может помочь.

/location/passthrough.js

import Ember from 'ember';

/* Implement history API that hard refreshes on transition */
export default Ember.Object.extend({
  implementation: 'passthrough',
  rootURL: '/',

  init() {
      this.set('location', this.get('location') || window.location);
      this.set('baseURL', Ember.$('base').attr('href') || '');
  },

  setURL(path) {
    this.get('location').href = path;
  },

  replaceURL(path) {
    this.get('location').href = path;
  },

  getURL() {
    var rootURL = this.get('rootURL');
    var location = this.get('location');
    var path = location.pathname;
    var baseURL = this.get('baseURL');

    rootURL = rootURL.replace(/\/$/, '');
    baseURL = baseURL.replace(/\/$/, '');

    var url = path.replace(baseURL, '').replace(rootURL, '');
    var search = location.search || '';

    url += search;
    url += this.getHash();

    return url;
  },

  onUpdateURL() {
    if (this.get('location').pathname === this.getURL()) {
      return;
    }

    window.location.href = this.getURL();
  },

  formatURL(url) {
    return url;
  },

  getHash: Ember.Location._getHash
});

/initializers/location.js

import PassThroughLocation from '../location/passthrough';

export function initialize(instance) {
  instance.register('location:passthrough', PassThroughLocation);
}

export default {
  name: 'location',
  initialize: initialize
};

Тогда у меня в роутере есть location:'passthrough' задавать.

Часть моих рассуждений сделать это для определенных страниц, я хочу включить дополнительные модули и установить отдельный CSP. В основном, когда вы нажмете /secure/path серверная часть устанавливает более строгий CSP в заголовках и загружает несколько модулей, используемых только в этом разделе веб-сайта.

ОБНОВИТЬ:

Переопределение поведения link-to Компонент кажется возможным, хотя и довольно интимным.

import Ember from 'ember';

export function initialize() {
    Ember.LinkComponent.reopen({
        _invoke: function (event) {
            window.location.href = event.target.pathname;

            return false;
        }
    });
}

export default {
  name: 'location',
  initialize: initialize
};

0 ответов

Другие вопросы по тегам