如何在Ember中通过id和查询参数找到记录
How to find a record both by id and query parameters in Ember
我正试图使用ember数据通过id和查询参数向端点发送请求。ajax调用的最终输出将是http://api.example.com/invoices/1?key=value
。据我所知,ember数据的store
没有通过id和查询参数找到的本地方法(以下两种方法都不起作用):
// outputs http://api.example/com/invoices/1
this.store.find('invoice', 1);
// outputs http://api.example.com/invoices?id=1&key=value
this.store.find('invoice, {id: 1, key: value});
相反,我一直在尝试修改发票适配器。我们的后端是Django,所以我们使用ActiveModelAdapter
。我想覆盖构建url的方法,这样,如果query
对象中存在id
,它将自动删除它并将其附加到url,然后再将query
对象的其余部分转换为url参数。
唯一的问题是我不知道该重写哪种方法。我在这里查看了ActiveModelAdapter
的文档,并尝试覆盖findRecord
、buildUrl
、urlForFind
和urlForQuery
方法,但由于某种原因,它们都没有被调用(我尝试通过console.log
和Ember.debug
进行日志记录)。我知道适配器工作正常,因为namespace
正在工作。
这是我的适配器文件:
import DS from 'ember-data';
import config from '../config/environment';
export default DS.ActiveModelAdapter.extend({
namespace: 'v1',
host: config.apiUrl,
// taken straight from the build-url-mixin and modified
// very slightly to test for logging
urlForFindRecord: function(id, modelName, snapshot) {
Ember.debug('urlForFindRecord is being called');
if (this.urlForFind !== urlForFind) {
Ember.deprecate('BuildURLMixin#urlForFind has been deprecated and renamed to `urlForFindRecord`.');
return this.urlForFind(id, modelName, snapshot);
}
return this._buildURL(modelName, id);
},
// taken straight from the build-url-mixin and modified
// very slightly to test for logging
findRecord: function(store, type, id, snapshot) {
Ember.debug('findRecord is being called');
var find = RestAdapter.prototype.find;
if (find !== this.find) {
Ember.deprecate('RestAdapter#find has been deprecated and renamed to `findRecord`.');
return this.find(store, type, id, snapshot);
}
return this.ajax(this.buildURL(type.modelName, id, snapshot, 'findRecord'), 'GET');
},
// taken straight from the build-url-mixin and modified
// very slightly to test for logging
urlForQuery: function(query, modelName) {
Ember.debug('urlForQuery is being called');
if (this.urlForFindQuery !== urlForFindQuery) {
Ember.deprecate('BuildURLMixin#urlForFindQuery has been deprecated and renamed to `urlForQuery`.');
return this.urlForFindQuery(query, modelName);
}
return this._buildURL(modelName);
},
// taken straight from the build-url-mixin and modified
// very slightly to test for logging
_buildURL: function(modelName, id) {
Ember.debug('_buildURL is being called');
var url = [];
var host = get(this, 'host');
var prefix = this.urlPrefix();
var path;
if (modelName) {
path = this.pathForType(modelName);
if (path) { url.push(path); }
}
if (id) { url.push(encodeURIComponent(id)); }
if (prefix) { url.unshift(prefix); }
url = url.join('/');
if (!host && url && url.charAt(0) !== '/') {
url = '/' + url;
}
return url;
},
});
有没有一种更简单的方法可以在不重写适配器方法的情况下完成我想要做的事情?如果没有,我需要覆盖哪些方法
提前感谢您的帮助!
您可以使用this.store.findQueryOne('invoice',1,{key:value});
https://github.com/emberjs/data/pull/2584
相关文章:
- 如何将参数赋予作为查询参数的参数值给定的函数
- 具有可选'/'s和查询参数
- 如果没有Ember中的控制器,我如何更改查询参数
- 如何编码&在不是't是查询参数的一部分
- 如何在JavaScript中传递查询参数和重定向
- React 路由器和任意查询参数:页面在加载时无意中刷新
- MongoDB查找查询参数
- 布尔查询参数被 Sails.js 视为字符串
- jQuery脚本,它搜索现有的查询参数并且不添加“"如果存在
- 基于查询参数的可选承诺步骤
- 如何使用Backbone.Return捕获查询参数的更改
- 在iron router中使用查询参数修改模板
- 如何将查询参数设置为我的所有路线,当它改变时-在恩伯
- 如何使用查询参数在jQuery中生成url
- Javascript/jQuery URL查询参数解析
- Ember.js查询参数不尊重replace:true并使用replaceState
- jQuery将查询参数附加到当前哈希中,忽略重复项
- window.location.href未设置查询参数
- 如何在angular中访问URL中的查询参数(在hash之外,非html 5模式)
- 获取具有主干木偶查询参数的当前 URL