Ember.js 成员:来自findQuery的响应必须是数组,而不是未定义的
我试图通过调用APIEmber.js 成员:来自findQuery的响应必须是数组,而不是未定义的,ember.js,ember-data,ember-cli,Ember.js,Ember Data,Ember Cli,我试图通过调用API/search?q=test来实现搜索功能。API返回以下对象: { "categories" : [ { "id" : 77, "name" : "Animals", "output" : {} }, { "id" : 167, "name" : "Fish", "
/search?q=test
来实现搜索功能。API返回以下对象:
{
"categories" :
[
{
"id" : 77,
"name" : "Animals",
"output" : {}
},
{
"id" : 167,
"name" : "Fish",
"output" : {
"image" : {
"mimeType" : "image/png",
"path" : "/images/fish.png"
}
}
}
],
"designs" : []
// more arrays here
}
这是我的余烬搜索
模型:
export default DS.Model.extend({
categories: DS.hasMany('category'),
designs: DS.hasMany('design')
// more hasMany relationships here
});
在搜索中
控制器:
model: function (params) {
return this.store.find('search', { q: params.q });
}
获取此错误“断言失败:来自findQuery的响应必须是数组,而不是未定义的”
我是Ember的新手,但我觉得我也需要添加一个搜索
序列化程序,但不确定要在其中编写什么。或者可能是其他原因造成的。在我看来,它应该工作得很好,但事实并非如此。有什么建议吗
model: function (params) {
return this.store.find('search', { q: params.q });
}
这告诉ember data
您要查找search
对象。因此,它期望的是数组中的那些,而不是类别
您可以使用适配器上的pathForType
函数指定类型的路径:
App.ApplicationAdapter = DS.RESTAdapter.extend({
pathForType: function(type) {
if (type == 'category') {
return 'search';
}
var decamelized = Ember.String.decamelize(type);
return Ember.String.pluralize(decamelized);
}
});
这意味着当您请求这样做时:This.store.find('category',{q:params:q})代码>
它将请求/search?q=param
这些都是根据文件
未来可能会发生变化
支持此rfc:这将使您能够更改特定操作的url 使用给定的代码,您可以尝试查找一些(读取:一个数组)搜索。答复中缺少此项,因此出现错误
你真正想要的是
model: function (params) {
return this.store.find('category', { q: params.q });
}
但这将导致请求/categories?q=test
。如果服务器代码和接口完全由您自己控制,请更改服务器。如果没有,您可以使用自定义的RESTAdapter(在ember cli中:ember g适配器类别
)和自定义的pathForType
方法。对于那些感兴趣的人,我最终使用了ajax
调用,而不必依赖于ember数据和模型。这就是我提出的解决方案:
model: function (params) {
var route = this;
return Ember.$.ajax({
url: ENV.apiHost + '/search?q=' + params.q,
type: 'GET'
}).then (function(result) {
var searchObject = Ember.Object.create({
categories: Ember.ArrayProxy.create({ content: Ember.A(result.categories) }),
designs: Ember.ArrayProxy.create({ content: Ember.A(result.designs) }),
// more arrays here
});
return {
model: searchObject
};
});
},
等待8个小时,在5分钟内得到2个答案:哦,看来阿尔伯詹在同一时间给出了基本相同的答案。阅读这些答案是相互补充的…对不起,我应该更清楚搜索对象中的内容。。搜索模型中实际上有一些其他数组,但为了简单起见,我只在其中留了一个。。。查看我的更新问题对不起,我应该更清楚搜索对象中的内容。。搜索模型中实际上有一些其他数组,但为了简单起见,我只在其中留了一个。。。看我更新的问题好吧,我真的很困惑。我不明白为什么搜索应该成为一种模式。那个人的身份证是什么?我很确定你误用了这个模型。为什么你不能单独搜索每种类型并进行查找呢?我是Ember的新手,我想当你向API发出这样的请求时,this.store.find('search',{q:params.q})
你需要一个模型,不是吗?我基本上有一个API/search?q=param
,它返回多个列表/数组,这些列表/数组在我的Ember应用程序中已经有了模型。是否有更好的方法在Ember中调用此API端点并将其推送到Search
route中的模型对象?