我正在尝试将数据从我的前端ember应用程序发送到rails API。有问题的方法,捐赠,坐在自定义路线:
patch 'accounts/:id/donate' => 'accounts#donate'
为了调用它,我知道我的ember路由需要使用适配器来覆盖正常的补丁方法,但那是关于我的知识结束的地方。这是我当前路线的状态:
import Ember from 'ember';
export default Ember.Route.extend({
actions: {
donate(params){
console.log('hits');
console.log(params);
let patron = this.get('store').findRecord('account', 10);
// here is where I need to link to my adapter
patron.donate(params);
}
}
});
和我的适配器文件(我甚至无法启动它,所以代码的质量很低):
import ApplicationAdapter from './application';
export default ApplicationAdapter.extend({
// Not super confident about this adapter, not am I super confident about how I
// am passing data through it.
donate(store, type, record) {
let api = this.get('host');
let serialized = this.serialize(record, {includeId: true});
let accountId = serialized.account_id;
let url = `${api}/accounts/${accountId}/donate`;
let data = {account: serialized};
return this.ajax(url, 'PATCH', {data});
}
});
使此功能正常工作的第一步是确保我的适配器可以正确调用我的服务器。我将如何/在哪里实现这一目标?
答案 0 :(得分:0)
正如您所发现的,Ember的默认适配器假定一个非常特定的REST API资源模型(JSON API spec)。然而,关于Ember社区的好处是,如果存在常见问题,那么通常会有一个图书馆可以提供帮助,并且有一个"行动和#34也很常见;基于REST API。
tl; dr如果您可以在代码库中添加另一个库,请结帐ember-api-actions
。从粗略的角度来看,它似乎只需要很少的配置即可完成您的需求。它对Ember Observer也有很好的评价(似乎生产值得)。
答案 1 :(得分:0)
在你的路线动作中,捐赠动作将调用商店对象的createRecord方法,如下所示:
this.store.createRecord('modelName', objectToBeSentToTheServer);
在适配器中,您需要创建一个createRecord函数 处理来自路线的电话。
查看Ember Data API:
https://www.emberjs.com/api/data/
以下链接提供了有关创建,更新,查找记录的适配器功能的详细信息:
https://www.emberjs.com/api/data/classes/DS.JSONAPIAdapter.html