Ember.js 余烬数据findAll在第一次请求时返回0条记录
为了填满存储区,引导ember数据的最佳位置是哪里: 我目前正在使用第13版的余烬数据 目前,我正在应用程序路线中尝试这一点: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,但如果我随后键入
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请求之前调用它。