Ember.js: TransitionAborted saat melakukan transisi rute penuh dengan parameter kueri yang diubah

Dibuat pada 9 Sep 2014  ·  50Komentar  ·  Sumber: emberjs/ember.js

Mengapa kesalahan TransitionAborted muncul saat melakukan transisi rute penuh saat mengubah parameter kueri?

Saya sedang mengerjakan contoh "Ikut serta dalam transisi penuh melalui refresh ()" yang tersedia di bagian bawah panduan parameter kueri Ember (http://emberjs.com/guides/routing/query-params/).

Satu-satunya perubahan yang saya buat adalah mencatat kesalahan:

Ember.RSVP.configure('onerror', function(error) {
  Ember.Logger.assert(false, error);
});

Berikut adalah JS Bin yang diperbarui: http://jsbin.com/kinajoginedo/1/edit?console , output

Jika Anda mengeklik tombol "Ubah", Anda akan melihat kesalahan TransitionAborted muncul di konsol.

Saya telah mencoba meningkatkan Ember di aplikasi saya dari 1.7.0-beta.1 + canary untuk beberapa waktu sekarang, tetapi banyak dari tes QUnit saya gagal ketika saya menjalankan semuanya secara bersamaan. Sebagian besar pengujian saya baik-baik saja jika saya menjalankannya secara terpisah. Saya menduga kesalahan TransitionAborted dapat menyebabkan kegagalan pengujian. Namun, saya tidak yakin apakah pengecualian TransitionAborted normal saat melakukan transisi penuh. Jika ada yang bisa memastikan dengan satu atau lain cara, itu akan sangat membantu untuk menemukan akar penyebab masalah saya, apa pun itu.

Bug Query Params

Komentar yang paling membantu

FYI - masih melihat ini di 2.8.1 , saya mengatasinya dengan membatalkan panggilan penyegaran - inilah Mixin yang dapat Anda tambahkan ke rute yang menggunakan refreshModel: true :

import Ember from 'ember';

/**
 * Debounce Refresh
 * Ember routes with queryParams that have refreshModel double-trigger a refresh:
 * see: https://github.com/emberjs/ember.js/issues/5566
 *
 * Mix this in to routes that define queryParams[param].refreshModel to avoid the TransitionAborted error thrown when double-triggering refreshes.
 */
export default Ember.Mixin.create({
  refreshDebounceThreshold: 100,
  _lastRefresh: null,
  _doRefresh() {
    if (this._lastRefresh) {
      this._lastRefresh();
      this._lastRefresh = null;
    }
  },
  refresh() {
    this._lastRefresh = this._super.bind(this, ...arguments);
    Ember.run.debounce(this, '_doRefresh', this.get('refreshDebounceThreshold'));
  }
});

Semua 50 komentar

@ pikiran mesin?

Saya mengalami masalah ini juga ...

Hai teman-teman, ada pembaruan tentang masalah ini? Ada lagi yang bisa kami berikan?

sama di sini - Saya mendapatkan kesalahan ini

Saya juga melihat kesalahan ini. Perlu dicatat bahwa metode RSVP configure sudah tidak digunakan lagi , namun hasilnya sama dengan menggunakan RSVP.on .

Ember.RSVP.on('error', function(error) {
  Ember.Logger.assert(false, error);
});

Apakah kesalahan ini secara material memengaruhi aplikasi teman Anda atau hanya pengujian Anda?

Saya melihatnya di aplikasi utama saya. Saya baru saja mengujinya — dan berdasarkan kesalahan ini, saya baru saja mengeluarkannya dan pindah untuk saat ini.

Saya juga melihat kesalahan TransitionAborted ini dilaporkan untuk beberapa pengguna melalui layanan pelacakan kesalahan kami setelah menambahkan

Ember.RSVP.on('error', function(error) {
  Ember.Logger.assert(false, error);
});

Tampaknya dipicu oleh rute yang modelnya diperbarui setiap 2 detik.

Saya melakukan investigasi, dan sepertinya panggilan kedua ke fireQueryParamsDidChange di getTransitionByIntent ( transitionByIntent dalam salinan Ember.js 1.7.1) di pustaka router.js menyebabkan kesalahan TransitionAborted (panggilan pertama dilakukan di panggilan queryParamsTransition sebelumnya dalam fungsi):

https://github.com/tildeio/router.js/blob/03810a915789549c4798c8eeb7d23e64b9789c75/lib/router/router.js#L64

Ketika saya mengomentari baris itu, aplikasi saya tampaknya berfungsi normal dan tanpa kesalahan. Tampak seperti bug bagi saya, karena transitionByIntent memberitahukan perubahan parameter kueri dua kali. Namun, panggilan kedua diimplementasikan oleh @raytiley karena alasan tertentu:

https://github.com/tildeio/router.js/commit/9a07446e62850e5aad241eb2c23d88127e4839d9

Saya tidak sepenuhnya yakin saya memahami alasannya, tetapi apakah itu menduplikasi perilaku menyetel refreshModel menjadi true?

Tes QUnit saya gagal karena sesuatu yang lain sama sekali (menyetel parameter kueri ke null di rute menonaktifkan panggilan balik, yang menyebabkan tes berikutnya gagal sementara transisi karena perubahan parameter kueri dicoba).

Mengalami ini di Ember 1.8.1.

Edit

Saya dapat mengonfirmasi bahwa mengomentari baris yang disebutkan oleh @skoryky memperbaiki masalah.

Dalam kasus saya, saya harus mengubah beberapa parameter kueri. Saya masih mendapatkan kesalahan konsol bahkan setelah mengomentari baris seperti yang disarankan oleh @skoryky . Namun, selain error konsol, aplikasi tersebut berperilaku sebagaimana mestinya.
JSBin: http://jsbin.com/kekowabazi/1/edit
Versi Ember: 1.8.1

@shripathee , saya juga mengalami masalah Anda. Ternyata callback fireQueryParamsDidChange dipanggil sekali untuk setiap parameter kueri yang Anda setel ke refreshModel: true . Saya tidak begitu yakin kapan Anda menginginkan perilaku semacam itu (alih-alih satu pemberitahuan bahwa parameter kueri apa pun berubah), jadi saya mengganti hash queryParams options dengan:

actions: {
  queryParamsDidChange: function() {
    this.refresh();
  }
}

@ Skoryky Ya, ini berfungsi dengan baik. Terima kasih.

Saya juga menghadapi masalah ini,

Dapat juga mengkonfirmasi ini pada 1.8.1 juga dalam situasi di mana saya memiliki beberapa parameter kueri yang telah disetel seperti

queryParams:
    page:
      refreshModel: true
    query:
      refreshModel: true

Saya melihat kesalahan yang sama.

Saya juga mengalami masalah ini. (Ember 1.9.0) Hanya dengan refreshModel: true sekalipun. refreshModel: false tidak menyebabkan kesalahan. Tapi sepertinya tidak fatal.

Saya juga menghadapi masalah yang sama. Ada pembaruan?

Saya menempatkan ini dalam agenda pertemuan tim inti kita berikutnya.

Saya mengalami masalah ini dengan Ember 1.11.0-beta.4. Pembaruan?

Menghadapi masalah ini juga. Itu hanya mengganggu saya karena masuk sebagai kesalahan - berfungsi dengan baik jika tidak (saya melakukan pagination dan halaman berubah dan semuanya berfungsi dengan baik).

EDIT: menggunakan Ember 1.7.0

Melihat ini di 1.11.0-beta.1 + canary.26c1084c.

Saya menghadapi masalah ini untuk dan sebagai @gorandev , ini hanya dicatat tetapi tidak mengganggu aliran aplikasi.
Solusinya dapat berupa:

      Ember.RSVP.on 'error', (error) ->
        if error && error.message == "TransitionAborted"
          return

Hmm ...

Ini adalah perilaku yang saya coba terapkan (yang saat ini tidak dapat saya lakukan):

Pengguna dapat mengetik (biasanya) di kotak pencarian, yang menyegarkan model rute. Saat ini, jika saya menelan kesalahan TransitionAborted, UI pengetikan tidak merespons dengan baik dan akan mengganti kotak teks dengan transisi yang sudah selesai. Saya lebih suka membuang permintaan yang menumpuk daripada menunggu sampai mereka menyelesaikannya.

export default Ember.Route.extend({
  queryParams: {
    q: { replace: true, refreshModel: true },
    sort: { replace: true, refreshModel: true },
    filter: { replace: true, refreshModel: true }
  },

  model: function(params) {
     return this.store.find('user', params);
  }
}

Lihat ini di 1.11.1. Aplikasi berfungsi dengan baik selain mencatat kesalahan ini.

Saya melihat masalah yang sama ini. Ini menyumbang hampir semua pesan "kesalahan" produksi saya. (Saya menggunakan Track: js)

Saya membuat jsbin yang diperbarui (Ember versi 1.11.1): http://jsbin.com/zewuda/1/edit?html , js, output

Satu-satunya solusi saya saat ini adalah meretas fungsi onerror agar tidak mencatat kesalahan jika itu adalah kesalahan TransitionAborted.

Saya mengalami masalah yang sama, tetapi refresh() tidak pernah dipanggil. Itu dibatalkan begitu saja.

Sama di sini di 1.13.3, solusi @skoryky berfungsi dengan baik untuk saat ini.

Solusi dari @skoryky tidak berhasil untuk saya. Saya harus membungkus refresh () ke Ember.run.once untuk menghindari kesalahan TransitionAborted lagi.

//in your router code

actions: {
  queryParamsDidChange: function() {
    Ember.run.once(this, this.refresh);
  }
}

Solusi @skoryky juga berhasil untuk saya di Ember 1.11.3 Terima kasih guys =)

Ember v1.10.0

Solusi @piotrze hampir berhasil untuk saya. harus menggunakan next sebagai gantinya:

//in your router code

actions: {
  queryParamsDidChange: function() {
    Ember.run.next(this, 'refresh');
  }
}

Sepertinya solusi @piotrze Ember.run.once berhasil untuk saya di Ember 1.13, tetapi tidak lagi berfungsi di 2.2

@richmolj solusi @ r4m di atas masih berfungsi pada 2.2

Harap buka kembali masalah ini. Ini masih terjadi pada Ember 2.6 ketika queryParams memiliki refreshModel: true

Ember 2.7

queryParamsDidChange aktif beberapa kali bahkan jika tidak ada yang berubah, itulah mengapa saya juga membandingkan nilai queryParams lama dan baru.

    queryParamsDidChange: function(a,b) {
      // Compare to prevent refresh if nothing has changed
      if(
        a.page === b.page &&
        a.selectionId === b.selectionId &&
        a.sort === b.sort &&
        a.sortDirection === b.sortDirection
      ){
        return;
      }

      Ember.run.next(this, 'refresh');
    }

FYI - masih melihat ini di 2.8.1 , saya mengatasinya dengan membatalkan panggilan penyegaran - inilah Mixin yang dapat Anda tambahkan ke rute yang menggunakan refreshModel: true :

import Ember from 'ember';

/**
 * Debounce Refresh
 * Ember routes with queryParams that have refreshModel double-trigger a refresh:
 * see: https://github.com/emberjs/ember.js/issues/5566
 *
 * Mix this in to routes that define queryParams[param].refreshModel to avoid the TransitionAborted error thrown when double-triggering refreshes.
 */
export default Ember.Mixin.create({
  refreshDebounceThreshold: 100,
  _lastRefresh: null,
  _doRefresh() {
    if (this._lastRefresh) {
      this._lastRefresh();
      this._lastRefresh = null;
    }
  },
  refresh() {
    this._lastRefresh = this._super.bind(this, ...arguments);
    Ember.run.debounce(this, '_doRefresh', this.get('refreshDebounceThreshold'));
  }
});

@jesseditson terima kasih untuk Mixin. Ada satu masalah, ketika Anda mengubah parameter kueri dari sebuah rute, transisi ke halaman yang berbeda, dan kemudian kembali ke halaman dengan parameter kueri, refresh terjadi lagi dan menyebabkan kesalahan.

@supersabillon ah, saat melanjutkan dengan QP "lengket"? Saya telah menonaktifkannya di aplikasi yang saya gunakan, saya bertanya-tanya apakah itu sebabnya saya tidak menemukan kasus itu.

masih terjadi di 2.11.0-beta.2.

Ya, masih terjadi pada saya juga di 2.10.0 :(

Apakah ini diperbaiki secara diam-diam di 2.12.0? (lakukan https://github.com/emberjs/ember.js/commit/cee49a315b2467f7c1a9193546a51e427dc72bd6)

@aaxelb tidak sengaja, tetapi mungkin itu memperbaikinya. Apakah perilakunya benar di 2.12?

Saya mereproduksi JSBin (dengan versi Ember saat ini) dan tampaknya sudah diperbaiki.

https://jsbin.com/cajiji/edit?html , js, keluaran

penutupan....

Kesalahan ini terlalu berlebihan saat melakukan ini dalam sebuah rute:

return this.transitionTo(my_route)

Menghapus kata kunci kembali, perbaiki.

Ini terjadi pada saya hanya dalam pengujian, khususnya setelah meningkatkan pengujian ke RFC (ish) baru. Seperti yang dikatakan @ cesarluis13915 , menghapus return sebelum transitionTo memperbaiki pengujian saya.

Terjadi dalam proyek kami dengan peningkatan Ember 3.11.1.
return this.replaceWith(null, id); membuat tes gagal dengan TransitionAborted
this.replaceWith(null, id); berhasil: man_shrugging:

Saya melihat ini muncul di layanan pelacakan kesalahan, Sentry

@rws ping

Ketemu ini di 3.11.1. Dibuka kembali di # 18416 dengan repro. Dapat menyelesaikannya dengan solusi queryParamsDidChange bukanlah tindakan sekarang, ini hanya sebuah metode.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat