Проблема, описанная в № 12169, все еще существует, поэтому я подаю новую заявку, так как исходная заявка уже закрыта.
Единственный способ обойти это в ember 2.10 для меня - это решение, опубликованное @taras 23 декабря 2015 года в # 12169 (другие упомянутые решения не работали):
let RedirectAfterDidTransition = Ember.Mixin.create({
redirectAfterDidTransition(...args) {
this.router.one('didTransition', ()=>{
this.router.transitionTo(...args);
});
}
});
export default Route.extend(RedirectAfterDidTransition, {
afterModel() {
this.redirectAfterDidTransition('index');
}
});
Обновлен jsbin до Ember 2.11.
Обновлено до 2.12 beta 1 и кажется исправленным. Можете ли вы предоставить тест, который не работает в версии 2.11, но исправлен в версии 2.12, чтобы убедиться, что у нас нет регресса?
Спасибо!
+1 по этому поводу. Имея такую же проблему!
Видя это 2.10.2. Вот трассировка стека:
TypeError: Cannot read property 'name' of undefined
at Class._queryParamsFor (vendor.js:47541)
at Class.finalizeQueryParamChange (vendor.js:45361)
at Router.triggerEvent (vendor.js:47954)
at trigger (vendor.js:75664)
at finalizeQueryParamChange (vendor.js:77652)
at Router.queryParamsTransition (vendor.js:76999)
at Router.getTransitionByIntent (vendor.js:76908)
at Router.transitionByIntent (vendor.js:77017)
at doTransition (vendor.js:77619)
at Router.transitionTo (vendor.js:77093)
Я вижу это на 2.13.
+1 в 2.13.3
Я вижу это в 2.14.0
Возникла та же проблема на 2.15.0.
Ember 2.16.2 все еще имеет эту проблему
Так что это все еще происходит в 2.18.0. Действительно?
@gschulze Я вижу это на 2.18.
Я все еще испытываю эту проблему в Ember 2.18
@ GCheung55 @akaravashkin @alvinvogelzang @bretjb @divmgl @gschulze @jemware @kbullaughey @locks @ rafael-paiva @ zidjian257 Просто любопытно, это все еще проблема в Ember 3?
@pixelhandler Я все еще использую LTS 2.18.2, и сейчас у меня нет времени проверять Ember 3 ... извините
@ rafael-paiva спасибо за обновление :)
Я вижу это на 3.4.1, но не могу воспроизвести в твиддле. Я получаю ту же самую трассировку стека, упомянутую выше, и обнаружил, что в строке выбрасывается исключение, проблема в том, что свойство .name
пытается получить от объекта из пустого массива. Я бы сказал, что должна быть проверка, пуст ли этот массив, что дает более точное сообщение об ошибке. Я создал # 17118 специально для этого.
Я использую 2.18.2, и у меня такая же ошибка. Отмена перехода из объекта перехода помогла мне. В моем случае использования 401
на крючке error
.
error: function (error, transition) {
if (error.status === '401') {
// Do other stuff ex. localStorage.clear();
transition.abort();
this.transitionTo('index', {
queryParams: {
showLogin: true
}
});
return true;
}
}
Вот тиддл, показывающий эту проблему: https://ember-twiddle.com/7515eb58d0e64666b27bcb9fe9b3adfc/faba6dcc7af61662e0b201b3833571a155cd90d0?openFiles=routes.application.js%3%2C&routes.application.js%2C&routes.application.js%2C&routes.
(Также опубликовано на # 17118)
Я вижу это в 3.10
Кажется, дубликат № 17118.
Загляните в эту проблему, и она не очень хорошо работает с next (function ()), потому что это означает, что компоненты будут отображаться до нового преобразования.
Решение, которое сработало для меня:
import Route from '@ember/routing/route';
import { run } from '@ember/runloop';
export default Route.extend({
queryParams: {
site: {
refreshModel: true,
replace: true
}
},
beforeModel(transition) {
if (isEmpty(transition.queryParams.site)) {
run(this, function() {
this.replaceWith({ queryParams: {
site: 1,
}});
});
}
},
model(params) {}
});
Таким образом, использование «run» вместо «next» привело к тому, что оно появилось перед рендерингом компонентов и т. Д. Я заметил это, потому что я видел, как срабатывали дополнительные запросы XHR, прежде чем у нас был действительный идентификатор сайта.
@JackEllis Почему бы не return this.replaceWith()
без run
/ next
? А может transition.abort()
, не уверен.
@lolmaus Потому что он не работает без run / next. Если я верну его без запуска / следующего, мы получим ошибку, о которой идет речь
Это происходит в 3.12.
И 3,13
Это может быть поверхностная оценка, но этот метод в классе маршрутизатора, похоже, допускает небезопасный доступ:
https://github.com/emberjs/ember.js/blob/5c214717b07621f5f052ac56d358db74cc368723/packages/%40ember/-internals/routing/lib/system/router.ts#L924 -L930
Что происходит, так это то, что коллекция routeInfos
выходит пустой, что, как я полагаю, является проблемой самой по себе (я недостаточно знаю о внутреннем устройстве, чтобы комментировать), но если мы изменим эти две строки, чтобы учесть безопасный доступ, по крайней мере, исключение не будет создано в том случае, если routeInfos
- пустой массив.
@JackEllis Я создал # 17118, когда отлаживал эту ошибку до того момента, когда @arthur5005 показал ( let leafRouteName = routeInfos[routeInfoLength - 1].name) and also concluded that the problem is that
routeInfos` пуст. Я думаю, что эта ошибка является очевидным, что ее упустили из виду и ожидал, что это вызовет ошибки в и другие ситуации, но поскольку я ничего не нашел, я создал другую проблему, чтобы получить больше информации об этом коде; почему он написан таким образом и можно ли исправить это так же просто, как отловить очевидное исключение пустого массива, подобное предложенному
Это было год назад, и я даже не получил ответа, подтверждающего, был ли этот фрагмент кода написан плохо случайно или есть какие-то причины.
git blame
упоминает @chadhietala как автора этих двух строк. Может, у него есть какие-то идеи? Также @rwjblue комментировал мою проблему, но с тех пор не комментировал ответы на свои комментарии. Я не уверен, знает ли основная команда об этой довольно очевидной проблеме.
Привет, я столкнулся с той же проблемой и исправил ее, используя перенаправление вместо beforeModel
. Надеюсь, это кому-то поможет 👍
Это все еще происходит в ember 3.17.
использование redirect
к сожалению, вызывает у меня ту же проблему в 3.12.
Загляните в этот вопрос еще раз в 3.20.4. Может ли кто-нибудь со знанием дела прокомментировать мою оценку? Рад помочь с некоторыми направлениями.
Можете ли вы проверить, решает ли это вашу проблему? 😊
https://github.com/tildeio/router.js/pull/307
Самый полезный комментарий
Это все еще происходит в ember 3.17.