Pembaruan URL yang bersemangat bagus ketika semuanya berhasil dibatalkan atau transisi dalam runloop yang sama. Tetapi pembatalan & transisi dapat terjadi di run loop berikutnya, dan dalam hal ini kami membiarkan aplikasi dalam keadaan rusak.
Dalam kasus pembatalan, Anda mendapatkan URL yang tidak mencerminkan keadaan Anda saat ini. Lain kali pengguna menekan tombol kembali, tidak ada yang terjadi.
Dalam kasus pengalihan, Anda menghentikan tombol kembali dengan meninggalkan status perantara dalam riwayat pengguna, yang sering kali hanya akan mengarahkan mereka kembali.
Saya membahas ini dengan @machty dan kami setuju akan baik untuk mengerjakan ini. Kemungkinan besar router dapat melacak dorongan URL yang bersemangat dan melepaskannya dengan history.back()
atau serupa ketika terjadi pembatalan.
Saya setuju dengan masalah ini. Saya melihatnya sekarang, meskipun saya melakukan transition.abort()
di pengait willTransition
pada rute. URL mencerminkan halaman yang akan dituju jika transisi tidak dibatalkan.
: +1:
@ ef4 Saya ingin Anda mencoba ini jika Anda memiliki kecenderungan; biar tahu minat / ketersediaan Anda
Saya dapat mengerjakan ini, tetapi mungkin tidak segera.
: +1: masuk ke ini saat mengikuti kode sampel willTransition
di dokumen API. URL diubah meskipun abort
dipanggil.
Saya punya masalah yang sama. Saya membuat jsbin membuatnya kembali untuk yang penasaran: http://emberjs.jsbin.com/tijebi/1
@ ef4 masih berencana untuk melihat ini?
Maaf, itu rendah dalam daftar prioritas saya akhir-akhir ini.
Sebagai catatan, saya baru saja mengalami masalah yang sama
Kami menyingkirkan URL yang bersemangat, mendekati jika # 9919
Untuk berjaga-jaga jika seseorang masih memiliki masalah ini dan membutuhkan solusi _sekarang_:
// app/routes/your-route.js
export default Ember.Route.extend({
// ...
actions: {
willTransition(transition) {
var model = this.controller.get('model');
if (
model.get('hasDirtyAttributes') &&
!confirm("You're going to discard all unsaved changes. Are you sure?")
) {
transition.abort();
// Custom revert of Back button result
var oldURL = this.router.generate(this.routeName, model);
var newURL = this.router.location.getURL();
if (oldURL != newURL) {
this.router.location.setURL(oldURL);
}
} else {
return true;
}
}
}
});
Saya tidak suka menggunakan metode this.router.location
secara langsung tetapi ini seperti satu-satunya cara untuk melakukan ini sekarang (untuk menangani _semua jenis lokasi_)
Saya baru saja memperbarui jsbin saya dari tahun lalu ke 1.13.4 dan masalah ini masih ada: http://emberjs.jsbin.com/lohekasuhu/edit?html , css, js
Saya dapat mengonfirmasi bahwa ini masih menjadi masalah dengan 1.13.11 juga.
Memanggil abort()
pada transisi afterModel
menghasilkan URL yang diperbarui dan aplikasi menjadi rusak.
Panggilan transitionToRoute
gagal memperbarui rute dengan benar, dan solusi di atas tidak lagi berfungsi karena router.location
tidak memiliki metode getURL
dan setURL
.
Aku diperbaharui @bcardarella 's [jsbin ke 2.5.0]. Masih terjadi.
Ini telah diperbaiki oleh https://github.com/tildeio/router.js/pull/197 (di 2.10.0-beta.3 +).
Demo melawan v2.10.0-beta.3: http://emberjs.jsbin.com/yeqisuh/1
@rwjblue Saya belum yakin ini telah diperbaiki untuk kasus transition#abort
?
@kanderek Ya, saya baru saja menemukan perilaku ini. Saya menggunakan 2.11.3.
Hai,
dengan ember 2.14, masalah tampaknya masih ada
Mengalami masalah ini dengan 2.11.3
Saat ini menggunakan solusi buruk yang saya temukan di stackoverflow
//right after an aborted transition
if (window.history) {
window.history.forward();
}
Tolong jangan mempermalukan saya untuk itu ^
+1
Saya masih melihat masalah ini! Saya di 2.12.2
Dapatkah seseorang memberikan contoh yang gagal untuk ini?
@wagenet berikut adalah contoh menggunakan Ember 3.1.1:
https://github.com/btecu/ember-issues/tree/5210
@SirZach @adamreisnz @bcardarella @bschouwerwou @btecu @cibernox @dkorenblyum @ ef4 @kanderek @kanongil @kottenator @machty @mutewinter @pixelhandler @ rafael-paiva @rwjblue @stefanpenner @wagenet @woprandi ada masalah atau buat reproduksi baru ini, bagaimana menurut Anda?
@btecu dapatkah Anda memperbarui contoh Anda ke Ember 3.5?
+1 Mengalami ini sekarang juga (menurut saya). Dalam kasus kami, kami bertransisi ke halaman, lalu kembali menggunakan window.history.go (-1) - tampaknya hanya melanjutkan memuat halaman saat ini (menyelesaikan transisi dll dan memuat sisa konten asinkron) yang membutuhkan beberapa saat, lalu akhirnya membuat transisi kembali. Namun, url segera diperbarui. Mungkin karena kami menggunakan api history secara langsung?
Baru saja mengalami ini dengan 3.9.1
Masalah ini kacau karena bug asli sudah diperbaiki. Kami tidak lagi ingin memperbarui URL. Saya akan menutupnya karena ada banyak sejarah yang tidak relevan di sini.
@miguelcobain jika Anda dapat membagikan reproduksi Anda pada 3.9.1 sebagai terbitan baru, yang akan membantunya mendapatkan perhatian yang tepat.
Ini adalah hasil teratas ketika saya mencari masalah ini yang tampaknya masih menjadi masalah, jadi saya pikir saya akan menempelkan cuplikan yang diperbarui dengan solusi untuk siapa saja yang tersandung (tolong beri tahu saya jika ada solusi aktual yang Saya tidak tahu):
<strong i="6">@service</strong> router
<strong i="7">@action</strong>
willTransition(transition) {
if (!transition.to.find(route => route.name === this.routeName) && !confirm('confirm?')) {
transition.abort()
let oldURL = this.router.currentURL;
let newURL = this.router.location.getURL();
if (oldURL != newURL) {
this.router.location.setURL(oldURL);
}
}
return true;
}
Ini adalah versi sederhana dari saran yang diberikan @kottenator di atas (https://github.com/emberjs/ember.js/issues/5210#issuecomment-122033542).
Komentar yang paling membantu
Ini telah diperbaiki oleh https://github.com/tildeio/router.js/pull/197 (di 2.10.0-beta.3 +).
Demo melawan v2.10.0-beta.3: http://emberjs.jsbin.com/yeqisuh/1