Ember.js:刷新后自定义Slug URL无法正常工作

时间:2015-03-29 13:32:37

标签: ember.js

我试图在Ember中为我的页面模型设置自定义slug网址。到目前为止,当我从索引页面调用链接时,它们正在工作。然而,如果我使用我的一个自定义网址刷新页面,则会再找不到该模型并且我被重定向到我的"找不到"页。所以也许它是一个"时间"问题,我应该以不同的方式加载模型?

我按了tutorial in the Ember guides并检查了this question on StackOverflow,但我仍然无法让它工作。

到目前为止,这是我的源代码段:http://emberjs.jsbin.com/hidefetido/1/

非常感谢您提前 - 感谢每一位帮助/评论。

1 个答案:

答案 0 :(得分:1)

首先,您必须使模型函数处理slug和序列化函数以将模型转换为url:

export default Ember.Route.extend({
  model: function (params) {
    return this.store.findAsId('company', 'slug', params.company_slug);
  },
  serialize: function (model) {
    return {company_slug: model.get('slug')};
  }
});

第二部分是可选的。服务器一般存在问题: 如果你要求/entity/slug ember-data会认为slug是id。所以你必须使用this.store.find('company', {slug:slug});,但这将返回数组,所以你必须转换它。这可以通过在商店中实现自己的功能来简化。

findAsId: function (type, field, value) {
    Ember.assert("You need to pass a type, field and value.", arguments.length === 3);

    var entity = this.all(type).findBy(field, value);
    if (Ember.isEmpty(entity)) {
        var query = {};
        query[field] = value;
        return this.find(type, query).then(function (array) {
            Ember.assert('Must find only one object. Found:' + array.get('length'), array.get('length') === 1);
            return array.get('firstObject');
        });
    } else {
        return new Ember.RSVP.Promise(function(resolve){
        resolve(entity);
    });
  }
}

store.js示例位于gist