Eager URL ์ ๋ฐ์ดํธ ๋ ๋ชจ๋ ๊ฒ์ด ๋์ผํ runloop์์ ์ค๋จ๋๊ฑฐ๋ ์ ํ ๋ ๋ ์ ์ฉํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ค๋จ ๋ฐ ์ ํ์ ํ์ ์คํ ๋ฃจํ์์ ๋ฐ์ํ ์ ์์ผ๋ฉฐ์ด ๊ฒฝ์ฐ ์์ฉ ํ๋ก๊ทธ๋จ์ ์ค๋จ ๋ ์ํ๋ก ๋ก๋๋ค.
์ค๋จ์ ๊ฒฝ์ฐ ์ค์ ํ์ฌ ์ํ๋ฅผ ๋ฐ์ํ์ง ์๋ URL๋ก ๋๋ฉ๋๋ค. ๋ค์์ ์ฌ์ฉ์๊ฐ ๋ค๋ก ๋ฒํผ์ ๋๋ฅด๋ฉด ์๋ฌด ์ผ๋ ์ผ์ด๋์ง ์์ต๋๋ค.
๋ฆฌ๋๋ ์ ์ ๊ฒฝ์ฐ ์ฌ์ฉ์ ๊ธฐ๋ก์ ์ค๊ฐ ์ํ๋ฅผ ๋จ๊ฒจ ๋ค๋ก ๋ฒํผ์ ํด์ ํ๋ฉด ์ข ์ข ๋ค์ ๋ฆฌ๋๋ ์ ๋ฉ๋๋ค.
๋๋ ์ด๊ฒ์ @machty ์ ๋
ผ์ํ๊ณ ์ฐ๋ฆฌ๋ ์ด๊ฒ์ ๋ํด ์์
ํ๋ ๊ฒ์ด ์ข์ ๊ฒ์ด๋ผ๊ณ ๋์ํ์ต๋๋ค. ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ๋ผ์ฐํฐ๋ eager URL ํธ์๋ฅผ ์ถ์ ํ๊ณ ์ค๋จ์ด ๋ฐ์ํ ๋ history.back()
๋๋ ์ด์ ์ ์ฌํ ๋ฐฉ์์ผ๋ก์ด๋ฅผ ํด์ ํ ์ ์์ต๋๋ค.
์ด ๋ฌธ์ ์ ๋์ํฉ๋๋ค. ๊ฒฝ๋ก์ willTransition
ํํฌ์์ transition.abort()
์ ์ํํ๋๋ผ๋ ์ง๊ธ๋ณด๊ณ ์์ต๋๋ค. URL์ ์ ํ์ด ์ค๋จ๋์ง ์์ ๊ฒฝ์ฐ ์ด๋ํ์ ํ์ด์ง๋ฅผ ๋ฐ์ํฉ๋๋ค.
: +1 :
@ ef4 ๋๋ ๋น์ ์ด ์ฑํฅ์ด ์๋ค๋ฉด ์ด๊ฒ์ ์ฐ๋ฅด๊ธฐ๋ฅผ ์ํฉ๋๋ค. ๊ทํ์ ๊ด์ฌ์ฌ / ๊ฐ์ฉ์ฑ์ ์๊ณ ๊ณ์ญ์์ค.
์ด ์์ ์ ํ ์ ์์ง๋ง ๋น์ฅ์ ์๋ ์ ์์ต๋๋ค.
: +1 : API ๋ฌธ์์ willTransition
์ํ ์ฝ๋ ๋ฅผ ๋ฐ๋ฅผ ๋ ์คํ๋์์ต๋๋ค. abort
๊ฐ ํธ์ถ ๋์์์๋ URL์ด ๋ณ๊ฒฝ๋ฉ๋๋ค.
๋๋ ๊ฐ์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ๊ถ๊ธํ ์ฌ๋๋ค์ ์ํด jsbin์ ๋ค์ ๋ง๋ค์์ต๋๋ค. http://emberjs.jsbin.com/tijebi/1
@ ef4๋ ์ฌ์ ํ ์ด๊ฒ์ ๋ณผ ๊ณํ์ ๋๊น?
์ฃ์กํฉ๋๋ค. ๋ฆ๊ฒ ์ฐ์ ์์ ๋ชฉ๋ก์์ ๋ฎ์ต๋๋ค.
๊ธฐ๋ก์ ์ํด ๋ฐฉ๊ธ ๊ฐ์ ๋ฌธ์ ๋ฅผ ๊ฒฝํํ์ต๋๋ค.
์ด๋ง URL์ ์ ๊ฑฐํ๊ณ # 9919 ์ธ ๊ฒฝ์ฐ ์ ๋ฆฌํฉ๋๋ค.
๋๊ตฐ๊ฐ๊ฐ ์ฌ์ ํ์ด ๋ฌธ์ ๋ฅผ ๊ฐ์ง๊ณ ์๊ณ _ ์ง๊ธ ๋น์ฅ ํด๊ฒฐ์ฑ ์ด ํ์ํ ๊ฒฝ์ฐ :
// 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;
}
}
}
});
this.router.location
๋ฉ์๋๋ฅผ ์ง์ ์ฌ์ฉํ๊ณ ์ถ์ง๋ ์์ง๋ง ๋ฐ๋ก ์ง๊ธ์ด ์์
์ ์ํํ๋ ์ ์ผํ ๋ฐฉ๋ฒ์
๋๋ค (_ ๋ชจ๋ ์ ํ์ ์์น _ ์ฒ๋ฆฌ).
๋ฐฉ๊ธ jsbin์ ์๋ ์์ 1.13.4๋ก ์ ๋ฐ์ดํธํ๋๋ฐ์ด ๋ฌธ์ ๊ฐ ์ฌ์ ํ ์กด์ฌํฉ๋๋ค. http://emberjs.jsbin.com/lohekasuhu/edit?html , css, js
1.13.11์์๋ ์ฌ์ ํ ๋ฌธ์ ์์ ํ์ธํ ์ ์์ต๋๋ค.
ํธ์ถ abort()
์ ์ ํ์ afterModel
URL์ ๊ฒฐ๊ณผ๊ฐ ์
๋ฐ์ดํธ๋๋ ๋ฐ ์์ฉ ํ๋ก๊ทธ๋จ์ด ๊นจ์ง ์ํ๋ก ์ ์ .
ํ์ transitionToRoute
ํธ์ถ์ด ๊ฒฝ๋ก๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์
๋ฐ์ดํธํ์ง ๋ชปํ๊ณ router.location
getURL
๋ฐ setURL
๋ฉ์๋๊ฐ ์์ผ๋ฏ๋ก ์์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ๋ ์ด์ ์๋ํ์ง ์์ต๋๋ค.
@bcardarella ์ [jsbin์ 2.5.0์ผ๋ก] ์ ๋ฐ์ดํธ
์ด๊ฒ์ https://github.com/tildeio/router.js/pull/197(2.10.0-beta.3+ ์์)์ ์ํด ์์ ๋์์ต๋๋ค.
v2.10.0-beta.3์ ๋ํ ๋ฐ๋ชจ : http://emberjs.jsbin.com/yeqisuh/1
@rwjblue ๋๋ ์ด๊ฒ์ด ์ค๋จ ์ฌ๊ฑด์ ๋ํด ์์ง ์์ ๋์๋์ง ํ์คํ์ง ์์ต๋๋ค. ์ด ๋ฌธ์ ๋ ember 2.12.0์์๋ณด๊ณ ์์ต๋๋ค. ๋ชจ๋ธ ํํฌ์์ ์ค๋จ ๋ ๊ฒฝ๋ก๋ก ์ ํ ํ ๋ URL์ ์ ํ์ด ์ค๋จ๋์ง ์์ ๊ฒ์ฒ๋ผ ์ ํ๋ฆฌ์ผ์ด์
์ ์ํ๋ฅผ ๋ฐ์ํฉ๋๋ค. ๋ค๋ฅธ ์ฌ๋๋ค์ด ์ฌ์ ํ transition#abort
์์ด ๋์์ ๊ฒฝํํ๊ณ ์์ต๋๊น?
@kanderek ์, ๋ฐฉ๊ธ์ด ํ๋์ ๋ฐ๊ฒฌํ์ต๋๋ค. ๋๋ 2.11.3์ ์์ต๋๋ค.
์๋
ํ์ธ์,
2.14 ๋
11 ์์๋ ๋ฌธ์ ๊ฐ ์ฌ์ ํ ์กด์ฌํ๋ ๊ฒ ๊ฐ์ต๋๋ค.
2.11.3์์์ด ๋ฌธ์ ๋ฐ์
ํ์ฌ์ด ์ถ์ ํ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ฌ stackoverflow์์ ๋ฐ๊ฒฌํ์ต๋๋ค.
//right after an aborted transition
if (window.history) {
window.history.forward();
}
์ ๋ฅผ ๋ถ๋๋ฝ๊ฒํ์ง ๋ง์ธ์ ^
+1
์ด ๋ฌธ์ ๊ฐ ๊ณ์ ๋ฐ์ํฉ๋๋ค! 2.12.2์ ์์ต๋๋ค.
๋๊ตฐ๊ฐ ์ด๊ฒ์ ๋ํ ์คํจํ ์๋ฅผ ์ ๊ณต ํ ์ ์์ต๋๊น?
@wagenet ์ 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 ๊ฐ ์ฌ์ ํ ๋ฌธ์ ์ ๋๋ค. ๋๋ ์ด๊ฒ์ ์๋ก์ด ๋ณต์ ๋ฌผ์ ๋ง๋ค๋ ค๋ฉด ์ด๋ป๊ฒ ์๊ฐํ์ญ๋๊น?
@btecu ์์ ๋ฅผ Ember 3.5๋ก ์ ๋ฐ์ดํธ ํ ์ ์์ต๋๊น?
+1 ์ง๊ธ๋ ์ด๊ฒ์ ๋ฐ์ด ๋ค์ด (๋ด ์๊ฐ ์). ์ฐ๋ฆฌ์ ๊ฒฝ์ฐ ํ์ด์ง๋ก ์ ํ ํ ๋ค์ window.history.go (-1)์ ์ฌ์ฉํ์ฌ ๋ค์ ๋์๊ฐ๋๋ค. ํ์ฌ ํ์ด์ง๋ฅผ ๊ณ์๋ก๋ํ๋ ๊ฒ (์ ํ ๋ฑ์ ์๋ฃํ๊ณ ๋๋จธ์ง ๋น๋๊ธฐ ์ฝํ ์ธ ๋ฅผ๋ก๋ํ๋ ๊ฒ)์ ์๊ฐ์ด ๊ฑธ๋ฆฝ๋๋ค. ๋ค์ ์ ํํฉ๋๋ค. URL์ ์ฆ์ ์ ๋ฐ์ดํธ๋ฉ๋๋ค. ํ์คํ ๋ฆฌ API๋ฅผ ์ง์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ผ๊น์?
3.9.1์์ ์ด๊ฒ์ ๊ฒฝํํ์ต๋๋ค.
์๋ ๋ฒ๊ทธ๊ฐ ํ์คํ ๊ณ ์น ์์๊ธฐ ๋๋ฌธ์์ด ๋ฌธ์ ๋ ๋ค์ฃฝ๋ฐ์ฃฝ์ด๋ค. ์ฐ๋ฆฌ๋ ๋ ์ด์ URL ์ ๋ฐ์ดํธ๋ฅผํ์ง ์์ต๋๋ค. ์ฌ๊ธฐ์๋ ๋ฌด๊ด ํ ์ญ์ฌ๊ฐ ๋ง๊ธฐ ๋๋ฌธ์ ๋ง๋ฌด๋ฆฌํ๊ฒ ์ต๋๋ค.
@miguelcobain 3.9.1์ ๋ํ ๋ณต์ ๋ฌผ์ ์๋ก์ด ๋ฌธ์ ๋ก ๊ณต์ ํด ์ฃผ์๋ฉด ์ ์ ํ์ฃผ์๋ฅผ๋ฐ๋ ๋ฐ ๋์์ด ๋ ๊ฒ์ ๋๋ค.
์ฌ์ ํ ๋ฌธ์ ์ธ ๊ฒ์ฒ๋ผ ๋ณด์ด๋์ด ๋ฌธ์ ๋ฅผ ๊ฒ์ํ์ ๋ ๊ฐ์ฅ ํฐ ๊ฒฐ๊ณผ ์๊ธฐ ๋๋ฌธ์์ด ๋ฌธ์ ๋ฅผ ๋ฐ๊ฒฌํ๋ ๋ชจ๋ ์ฌ๋์์ํ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ํฌํจ ๋ ์ ๋ฐ์ดํธ ๋ ์ค ๋ํซ์ ๋ถ์ฌ ๋ฃ์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ต๋๋ค (์ค์ ํด๊ฒฐ์ฑ ์ด ์๋์ง ์๋ ค์ฃผ์ธ์. ๋๋ ๋ชจ๋ฅธ๋ค) :
<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;
}
์ด๊ฒ์ @kottenator ๊ฐ ์์์ ์ ์ ํ ์ ์์ ๋จ์ํ ๋ ๋ฒ์ ์ ๋๋ค (https://github.com/emberjs/ember.js/issues/5210#issuecomment-122033542).
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ด๊ฒ์ https://github.com/tildeio/router.js/pull/197(2.10.0-beta.3+ ์์)์ ์ํด ์์ ๋์์ต๋๋ค.
v2.10.0-beta.3์ ๋ํ ๋ฐ๋ชจ : http://emberjs.jsbin.com/yeqisuh/1