Ember.js: transitionTo queryParams при первоначальном рендеринге все еще не работает

Созданный на 25 янв. 2017  ·  30Комментарии  ·  Источник: emberjs/ember.js

Проблема, описанная в № 12169, все еще существует, поэтому я подаю новую заявку, так как исходная заявка уже закрыта.

Has Reproduction Query Params

Самый полезный комментарий

Это все еще происходит в ember 3.17.

Все 30 Комментарий

Единственный способ обойти это в 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;
  }
}

Я вижу это в 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 - пустой массив.

https://github.com/emberjs/ember.js/blob/5c214717b07621f5f052ac56d358db74cc368723/packages/%40ember/-internals/routing/lib/system/router.ts#L926 -L927

@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

Была ли эта страница полезной?
0 / 5 - 0 рейтинги