我有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插件中(在“数据”部分中)
有谁知道什么是错误/我怎么可以调试它?
答案 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
他们离开他们。