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