ember AfterModel的一对多创建空数组

时间:2014-11-20 16:01:30

标签: arrays ember.js ember-data

我有2个型号。会话和测试。

App.Session = DS.Model.extend({
    tests: DS.hasMany('test', {async: true}/*, {inverse: 'sessionID'}*/),
});

App.Test = DS.Model.extend({
    session: DS.belongsTo('session', {async: true}, {inverse:'tests'}),
});

我有一个获取测试数组的路径(它不包含在来自服务器的JSON中)

App.SessionRoute = Ember.Route.extend({
    model: function(params) {
        return this.get('store').find('session', params.session_id);
    },

    afterModel: function(model) {
        var promise;
        promise = this.get('store').find('test', {
            sessionId: model.get('id')
        });
        return this.controllerFor('tests').set('model', promise);
    }
});

事实是,在获取后,Session中的tests数组仍然是空的 {{ tests.length }}
是0

当我登录到OnModel中返回的控制台时 - 我确实有数据 - 但是它嵌套在一个三层嵌套对象中(不知道它是不是应该如何)

Class {content:Class, ember1416498812066:“ember400”,__ nextSuper:undefined,__ ember_meta :Object,constructor:function ...} ember1416498812066:“ember400”__ ember_meta :Object__nextSuper :undefinedcontent:Class__ember1416498812066:“ember525” ember_meta :Object__nextSuper:undefinedcontent:Class__ember1416498812066:“ember524” ember_meta :Object__nextSuper:undefinedcontent: Array [1] isLoaded:truemanager:Classmeta:Objectquery:Objectstore:Classtype:BackslashUi.Test__proto__:ClassisFulfilled:true__proto __:Class__proto__:Class

测试对象很好地存在于ember chrome插件中(在“数据”部分中)

有谁知道什么是错误/我怎么可以调试它?

1 个答案:

答案 0 :(得分:0)

不要将测试控制器的模型设置为承诺;在履行时将其设置为承诺的结果,并返回承诺,以便Ember知道何时继续。

afterModel: function(model) {
    var testsController = this.controllerFor('tests');
    var promise = this.get('store').find('test', {
        sessionId: model.get('id')
    });
    return promise.then(function(tests) {
        testsController.set('model', tests);
    });
}

模型承诺的自动处理特别是在路由model钩子的上下文中发生。 model检查返回值,看它是否是一个承诺。如果是,它等待它解决,然后继续将承诺的结果传递给setupController等。您不能随机地将模型设置为承诺并期望它们起作用。没有人在看他们或等待他们解决或then他们离开他们。