ember.js - 使用 Ember.js 的 Hashbang URL

标签 ember.js ember-router hashbang

我正在尝试设置我的 Router使用“hashbang”网址( #! )。

我试过这个,但显然它不起作用:

App.Router.map(function() {
    this.route("index", { path: "!/" });
    this.route("otherState", { path: "!/otherState" });
});

这可以在 Ember 中完成吗?

最佳答案

Teddy Zeenny 的回答大部分是正确的,而且 registerImplementation似乎是实现这一点的干净方式。我试图编辑他的答案以使其完全回答问题,但我的编辑被拒绝了。

无论如何,这里是让 Ember 使用 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;
    }

}));

})();

然后,一旦您创建了您的应用程序,您就需要更改路由器以利用“hashbang”位置实现:
App.Router.reopen({
    location: 'hashbang'
})

关于ember.js - 使用 Ember.js 的 Hashbang URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14929170/

相关文章:

ember.js - Ember Data : CreateRecord not updating model when using store. 使用查询参数查找

ember.js - 每次路线改变时的触发方法

jquery - 从 jQuery 对象获取 Ember View

ember.js - Ember 中是否有用于新的each 语法的itemController?

javascript - 使用 Ember 在路由器中定义根路径

ajax - 如何使用 hashbang url 处理 facebook 分享/点赞?

javascript - 删除#!来自 ASP.Net Web API 中的 angular.js URL

ember.js - 如何将 Handlebars 绑定(bind)到任意属性?

javascript - Ember Js 1.0,计算属性和模板在数据更改时不刷新