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 余烬数据findAll在第一次请求时返回0条记录_Ember.js_Ember Data - Fatal编程技术网

Ember.js 余烬数据findAll在第一次请求时返回0条记录

Ember.js 余烬数据findAll在第一次请求时返回0条记录,ember.js,ember-data,Ember.js,Ember Data,为了填满存储区,引导ember数据的最佳位置是哪里: 我目前正在使用第13版的余烬数据 目前,我正在应用程序路线中尝试这一点: App.ApplicationRoute = Ember.Route.extend setupController: -> App.Contact.find().then (contacts) -> console.log contacts.get('length') 我发现上面的console.log语句将记录0,但如果我随后键入

为了填满存储区,引导ember数据的最佳位置是哪里:

我目前正在使用第13版的余烬数据

目前,我正在应用程序路线中尝试这一点:

App.ApplicationRoute = Ember.Route.extend
  setupController: ->
    App.Contact.find().then (contacts) ->
      console.log contacts.get('length')
我发现上面的console.log语句将记录0,但如果我随后键入:

App.Contact.find().get('length')
在控制台中,长度与我预期的一样,即大于0

我对正在发生的事情感到困惑,我本以为在记录兑现之前,承诺不会得到解决

我已经看完了代码,json在序列化程序中被解析出来,我无法理解为什么第一次长度是0

我不能为它创建一个提琴,因为它只发生在通过rest适配器连接到后端存储时

为了填满存储区,引导ember数据的最佳位置是哪里:

最好的地方是模型钩子(而不是setupController),因为ember路由器将等待每个模型钩子的承诺得到解决,然后再继续下一个。例如:

App.ApplicationRoute = Ember.Route.extend
  model: ->
    App.Contact.find()
我对正在发生的事情感到困惑,我本以为在记录兑现之前,承诺不会得到解决


我同意这是令人惊讶的。我看看能不能找到复制的方法。您可以尝试的一件事是在chrome开发者工具中启用XMLHttpRequests,这样您就可以在ajax回归之前看到承诺是否真的解决了。认为这也可能是绑定问题,比如promise可能在正确的时间解决,但length属性在下一次运行循环之前不会更新

我在github上创建了一个问题后得到了这个答案:

实际上,DS.Model.find()返回一个“promistified”RecordArray,在加载RecordArray时解析该承诺(即其isLoaded属性为true)。问题在于,创建数组后会立即加载DS.Model.find(),因此承诺得到了解决

为了解决您的问题(因为我认为您希望返回一个活动数组),类似这样的方法应该可以工作:

App.Contact.find({}).then(contacts) ->
   return App.Contact.all()

这样,在后台,您调用的是findQuery,它是在后端返回记录时加载的,而不是在数组创建时加载的

我有一个问题-这真的很奇怪。为什么只有当我在find上传入一个空对象时它才起作用。如果只执行App.Contact.find()-它将在promise函数实际完成其ajax请求之前调用它。