等待加载记录

时间:2014-02-14 22:09:53

标签: ember.js ember-data

我需要等待我的应用中加载了记录,但这不起作用:

    var sectors = this.get('store').find('sector');
    sectors.on('didLoad', function() {
        console.log("loaded: " + this.get('formLoaded'));
    });

它表示“对象[对象对象]在''上没有方法', 我做错了什么?

更新: 根据斩波器的建议,我得到一个新的错误,因为我使用它来从服务器获取数据以填充选择视图:

我有一个像这样的控制器:

App.FormController = Em.Controller.extend({
sectors: function() {
    var sectors = this.get('store').find('sector');
    return sectors;
}.property(),
accesslevels: function() {
    var accesslevels = this.get('store').find('accesslevel');
    return accesslevels;
}.property(),
equipments: function() {
    var equipments = this.get('store').find('equipment');
    return equipments;
}.property(),
difficulties: function() {
    var difficulties = this.get('store').find('difficulty');
    return difficulties;
}.property()

});

在模板中我有:

sectors: {{view Ember.Select id="settore" contentBinding="sectors" optionValuePath="content.id" optionLabelPath="content.descrizione"}}

access levels: {{view Ember.Select id="liv_acc" contentBinding="accesslevels" optionValuePath="content.id" optionLabelPath="content.descrizione"}}

等等; 这有时是有效的,有时也不会,因为我必须等待所有来自所有find()的记录在渲染视图之前加载;我按照上面的说法尝试了“on('didLoad')”跟随Ember doc,但是没有用;能帮我找到原因吗?

2 个答案:

答案 0 :(得分:1)

使用find / findAll返回的promise

 var sectors = this.get('store').findAll('sector').then( function(data) {
    console.log("loaded: " + data);
 });

答案 1 :(得分:0)

根据您的建议和其他答案,我最终决定使用此解决方案来加载多模型(在路由器处理程序中使用模型钩子):

model: function(params) {
    return Em.RSVP.hash({
        settori: this.get('store').findAll('sector'),
        attrezzature: this.get('store').findAll('equipment'),
        difficolta: this.get('store').findAll('difficulty'),
        livelliaccesso: this.get('store').findAll('accesslevel'),
        sino: [{id: 0, descrizione: "No"}, {id: 1, descrizione: "Sì"}]
    });
},
setupController: function(controller, model) {
    controller.setProperties(model);
}

RSVP应确保在呈现视图之前完全加载所有promise;

无论如何我面临一个奇怪的问题:有时我会收到这个错误:

Error while loading route: Error: Assertion Failed: The response from a findAll must be an Array, not undefined

这对我来说似乎是不可预知的:有时会发生,然后很多次都没有;我认为这是我第一次加载App时发生的事情; 在文档中写道,这可能与模型中的“hasMany”或“belongsTo”关系有关,但我的模型中没有这些;

我正在使用yeoman在本地开发App,并且基于节点js的restful服务器(使用express)提供从mysql加载的数据(easyphp正在运行mysql服务器)

有人知道什么是错的吗?