Teddy Zeenny jest w większości poprawne, a registerImplementation
wydaje się być czysty sposób zaimplementować to. Próbowałem po prostu edytować jego odpowiedź, aby w pełni odpowiedzieć na pytanie, ale moja edycja została odrzucona.
Zresztą tutaj jest pełny kod aby Ember użycie hashbang 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;
}
}));
})();
Następnie po utworzeniu aplikację trzeba zmienić router, aby wykorzystać „hashbang” Wdrożenie lokalizacji:
App.Router.reopen({
location: 'hashbang'
})
Udało mi się to zrobić poprzez nadpisanie właściwości 'Ember.HashLocation' w celu dodania niektórych"! "Do kilku ciągów. Nie jestem do końca pewien, czy to coś zepsuje. Jeśli nikt nie publikuje bardziej uzasadnionego sposobu, dodam mój kod jako odpowiedź. – twiz