我试图在Ember中为我的页面模型设置自定义slug网址。到目前为止,当我从索引页面调用链接时,它们正在工作。然而,如果我使用我的一个自定义网址刷新页面,则会再找不到该模型并且我被重定向到我的"找不到"页。所以也许它是一个"时间"问题,我应该以不同的方式加载模型?
我按了tutorial in the Ember guides并检查了this question on StackOverflow,但我仍然无法让它工作。
到目前为止,这是我的源代码段:http://emberjs.jsbin.com/hidefetido/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。