Ember.js:修改请求URL

时间:2017-09-27 20:00:50

标签: ember.js

我使用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,则它不起作用。这听起来合乎逻辑,但我不知道如何纠正这个问题......你能帮助我吗?

1 个答案:

答案 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