2013-05-31 64 views
2

哪里是启动以带烬数据,填补了店里最好的地方:我目前使用的余烬数据的修订13烬数据的findAll返回0记录在第一个请求

目前我在ApplicaitonRoute尝试这样的:

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.

我很困惑,到底发生了什么,我会认为承诺不会解决,直到记录rds被物化。

我已经通过代码和json解析出来的序列化程序,我不能解决为什么长度为0的第一次。

我不能为此创建一个小提琴,因为它只发生在通过其余适配器连接到我们的后端存储时发生。

回答

1

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

其实,DS.Model.find()返回一个“promistified” RecordArray界河承诺当recordarray加载被解决(即其isLoaded属性为true )。问题在于DS.Model.find()在创建数组后立即加载,结果是promise解决了。

为了解决您的问题(因为我觉得你想返回现场阵列),这样的事情应该工作:

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

这样一来,在引擎盖下,要调用findQuery,这在后端返回记录时加载,而不是在创建阵列时

+0

我有一个问题 - 它真的很奇怪。为什么只有当我在查找中传入空对象时才起作用。如果你只是做App.Contact.find() - 它会在实际完成它的ajax请求之前调用promise函数。 – David

1

哪里是启动以带烬数据,填补了店里最好的地方:

的最佳位置是在模型挂钩(而不是setupController),因为烬路由器将等待各模型钩的承诺,在继续前进之前解决。因此,例如:

App.ApplicationRoute = Ember.Route.extend 
    model: -> 
    App.Contact.find() 

我很困惑,到底是怎么回事,我本来以为承诺将不会得到解决,直到记录被物化。

同意这是令人惊讶的。我会看看我是否能找到一种方法来重现。您可能会尝试的一件事是在Chrome开发人员工具中启用XMLHttpRequests,以便您可以在ajax回来之前看到承诺是否真正解决。认为它也可能是一个绑定问题,也许承诺在正确的时间解决,但长度属性不会更新,直到下一次运行循环。

相关问题