Router
「ハッシュバン」URLを使用するように設定しようとしています( #!
)。
私はこれを試しましたが、明らかに機能しません:
App.Router.map(function() {
this.route("index", { path: "!/" });
this.route("otherState", { path: "!/otherState" });
});
これはEmberで行うことができますか?
Router
「ハッシュバン」URLを使用するように設定しようとしています( #!
)。
私はこれを試しましたが、明らかに機能しません:
App.Router.map(function() {
this.route("index", { path: "!/" });
this.route("otherState", { path: "!/otherState" });
});
これはEmberで行うことができますか?
Teddy Zeennyの答えはほとんど正しいものであり、registerImplementation
これを実装するためのクリーンな方法のようです。私は彼の答えを編集して質問に完全に答えるようにしようとしましたが、私の編集は拒否されました。
とにかく、EmberにハッシュバンURLを使用させるための完全なコードは次のとおりです。
(function() {
var get = Ember.get, set = Ember.set;
Ember.Location.registerImplementation('hashbang', Ember.HashLocation.extend({
getURL: function() {
return get(this, 'location').hash.substr(2);
},
setURL: function(path) {
get(this, 'location').hash = "!"+path;
set(this, 'lastSetURL', "!"+path);
},
onUpdateURL: function(callback) {
var self = this;
var guid = Ember.guidFor(this);
Ember.$(window).bind('hashchange.ember-location-'+guid, function() {
Ember.run(function() {
var path = location.hash.substr(2);
if (get(self, 'lastSetURL') === path) { return; }
set(self, 'lastSetURL', null);
callback(location.hash.substr(2));
});
});
},
formatURL: function(url) {
return '#!'+url;
}
}));
})();
次に、アプリを作成したら、「ハッシュバン」ロケーション実装を利用するようにルーターを変更する必要があります。
App.Router.reopen({
location: 'hashbang'
})
延長Ember.HashLocation
するのが道です。
クリーンな実装のために、次のことを行うことができます。
Ember.Location.registerImplementation('hashbang', Ember.HashLocation.extend({
// overwrite what you need, for example:
formatURL: function(url) {
return '#!' + url;
}
// you'll also need to overwrite setURL, getURL, onUpdateURL...
})
次に、ロケーション管理にカスタム実装を使用するようにAppRouterに指示します。
App.Router.reopen({
location: 'hashbang'
})