我的路线是:
export default Ember.Route.extend({
model: function (params) {
var blocks = this.store.find('block', {'objectId': 777});
this.controllerFor("blocks").set('model', blocks);
return Ember.RSVP.hash({
object: this.store.find('object', params.id),
blocks: blocks
});
//return this.store.find('object', params.id);
}
});
我的控制器是:
export default Ember.ArrayController.extend({
init: function(e){
alert('jere');
}
});
init函数中的警报有效,但接下来我收到错误:
处理路径时出错:objects.bc.index无法读取属性 '长度' null TypeError:无法读取属性' length'为null
通过ajax获取模型的正确方法是什么,并使用自定义数组控制器在模板中显示?
答案 0 :(得分:1)
此代码存在许多问题。首先,ArrayController
假定其模型是一个数组,而您的model
钩子返回一个哈希。其次,您的this.controllerFor("blocks").set('model', blocks)
调用会尝试将控制器的模型设置为承诺,这是无用的。您没有像这样在model
挂钩中为控制器设置模型。您可以通过返回模型进行设置,然后通过您的(或默认)setupController
挂钩将其安装(在解析后)到控制器中。
您不应该使用即将被弃用的ArrayController
,而是使用普通的旧控制器。该控制器的模型将是从model
钩子返回的哈希值。您需要使用{{model}}
在模板中显式访问它。
所以你想要这样的东西:
// route.js
export default Ember.Route.extend({
model: function(params) {
var blocks = this.store.find('block', {'objectId': 777});
return Ember.RSVP.hash({
object: this.store.find('object', params.id),
blocks: blocks
});
}
});
// controller.js
export default Ember.Controller.extend({
init: function(e) {
alert('jere');
}
});
在模板中,而不是
{{#each controller}}
blockProp is {{blockProp}}
正如您现在所做的那样,请使用
{{#each block in model.blocks}}
blockProp is {{block.blockProp}}
{{/each}}
And objectProp is {{model.object.objectProp}}