cloudant RESTful API 相当简单,但与ember-data期望的方式不符。如何自定义或创建处理这些问题的适配器......
在我的具体情况中,我只想加载几个二级索引之一的记录(即 MapReduce 功能)。
此网址如下所示,其中[name]和[view]会根据用户选择或我所在的路线而改变。
https://[username].cloudant.com/[db_name]/_design/[name]/_view/[view]
查看余烬数据源似乎并不像这样轻松地定义URL 。我看了一下findQuery,它希望通过url params发送任何变量,而不是实际URL本身的一部分。
我错过了什么吗?有没有明显的方法来解决这个问题?
然后数据以完全不同的格式返回,有没有办法告诉ember这种格式是什么?
谢谢!
答案 0 :(得分:2)
我有类似的问题,其中URL是动态的。我最终通过扩展DS.RESTAdapter并覆盖默认的buildURL方法来创建自己的adapater。例如:
App.MyAdapter = DS.RESTAdapter.extend({
buildURL: function(record, suffix) {
var username, db_name, name, view;
// Do your magic and fill the variables
return 'https://'+username+'.cloudant.com/'+db_name+'/_design/'+name+'/_view/'+view;
}
});
我最后还定义了我自己的find,findAll,findQuery,createRecord,updateRecord,deleteRecord等方法,因为我必须将更多变量传递给buildURL方法。
如果返回的数据格式不同,那么您也可以通过扩展DS.JSONSerializer并定义自己的提取方法extract,extractMany等来编写自己的序列化程序。
您应该评估您的API遵循ember / data RESTAdapter所需的数据格式的程度。如果它非常不同那么使用其他组件进行通信可能会更好,比如ember-model,ember-restless,emu等,因为ember-data不是很灵活(see this blog post)。您也可以直接从路径模型挂钩编写自己的ajax查询,而无需使用ember-data或其他组件。这样做并不是很难。