Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ember.js 成员:来自findQuery的响应必须是数组,而不是未定义的_Ember.js_Ember Data_Ember Cli - Fatal编程技术网

Ember.js 成员:来自findQuery的响应必须是数组,而不是未定义的

Ember.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", "

我试图通过调用API
/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中的模型对象?