我使用Symfony REST api创建了一个Ember应用程序。我还使用REST适配器来处理我的请求。
我的应用中有2个型号:用户及其相关的评论。 我已经为我的用户属性创建了CRUD操作,现在我专注于注释的CRUD操作。
Model user.js
export default DS.Model.extend({
firstName: DS.attr('string'),
lastName: DS.attr('string'),
comments: DS.hasMany('comment')
});
Model comment.js
export default DS.Model.extend({
title: DS.attr('string'),
message: DS.attr('string'),
user: DS.belongsTo('user')
});
我有一条路线显示给定用户的所有评论(和其他数据)。请求加载用户对象及其关系。在视图中,我还有一个表单和操作来为该用户创建新评论。
Route users/get.js
import Ember from 'ember';
export default Ember.Route.extend({
id: null,
model(params) {
this.set('id', params.user_id);
return this.get('store').findRecord('user', params.user_id, {include: 'comments'});
},
});
Route users/get/comments.js
import Ember from 'ember';
export default Ember.Route.extend({
model(params) {
return this.modelFor('user.get', params.user_id);
},
});
Controller users/get/comments.js
import Ember from 'ember';
export default Ember.Controller.extend({
newComment: null,
user: null,
init: function() {
this._super(...arguments);
let comment = this.store.createRecord('comment');
this.set('newComment', comment);
},
actions: {
saveComment: function() {
let user = this.get('model');
let comment = this.get('newComment');
comment.set('user', user);
comment.save();
}
}
});
除了发送到后端的请求外,一切正常。我加载了用户的评论,所以我希望打电话给:
发布 http://my-app.local/users/comments/
而是将呼叫发送到:
发布 http://my-app.local/comments/
你知道为什么以及如何纠正它?
第二个问题,模型是从'user.get'路线加载的。这是因为用户来自此页面的此路由,但是......如果用户直接输入注释的URL,则它不起作用。这听起来合乎逻辑,但我不知道如何纠正这个问题......你能帮助我吗?
答案 0 :(得分:1)
这可以通过重写CommentAdapter.urlForCreateRecord
方法来完成。这会影响新的评论记录请求。
适配器/ comment.js
import DS from 'ember-data';
export default DS.RESTAdapter.extend({
urlForCreateRecord(modelName, snapshot) {
return '/users/comments'; // the url you want
}
});
您可能需要多种urlFor...
方法来自定义您的网址。
只需查看文档
http://devdocs.io/ember/classes/ds.buildurlmixin/methods#urlForCreateRecord