Eri*_*kis 6 ember.js ember-data
我想加载一个完整的集合,然后剥离记录,一次一个地用作模型,而不是每次都进行到服务器的往返.
我已经想出如何使用Ember.Deferred返回一个承诺,但我无法在合适的时间得到解决的承诺.以下代码只输出"找到0"时间:
App.PersonRoute = Ember.Route.extend({
model: function(params) {
var name = "Erik";
var promise = Ember.Deferred.create();
App.people = App.Person.find();
App.people.then(function() {
console.log('Found ' + App.people.get('length'));
var person = App.people.findProperty('name', name)
promise.resolve(person);
});
return promise;
}
});
Run Code Online (Sandbox Code Playgroud)
如果我将then()的主体包装在一个setTimeout中,并让它等待几秒钟,那么一切都很好.
我可以以某种方式绑定到另一个事件吗?我尝试了App.people.on('isLoaded'),但isLoaded始终是真的.
谢谢!
我可以以某种方式绑定到另一个事件吗?
确实有一个你可以听的事件就是这样didLoad.
我尝试了App.people.on('isLoaded'),但isLoaded始终是真的.
至于isLoaded对此存在很多混淆,例如,请参阅此处,混淆来自于当商店完成加载记录时,设计将isLoaded标志设置为true 的事实,即使最初为空,因为没有记录是已在本地提供.然后,当对服务器的请求返回时,将填充从后端接收的记录,绑定将启动,模板将更新.RecordArrayRecordArray
如指南中所述:
加载和清除的记录表示已从服务器接收有关其属性和关系的信息,并且未在客户端本地进行任何更改.
上面说的是什么使得didLoad火灾.
有关更多与模型相关的事件,您可以聆听模型生命周期下的指南
现在进行设置,您可以将代码重写为以下内容:
App.PersonRoute = Ember.Route.extend({
model: function(params) {
var name = "Erik";
var promise = Ember.Deferred.create();
App.people = App.Person.find();
App.people.on('didLoad', function() {
console.log('Found ' + App.people.get('length'));
var person = App.people.findProperty('name', name)
promise.resolve(person);
});
return promise;
}
});
Run Code Online (Sandbox Code Playgroud)
希望能帮助到你.
| 归档时间: |
|
| 查看次数: |
3084 次 |
| 最近记录: |