我的路线是:
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);
}
});
我的 Controller 是:
export default Ember.ArrayController.extend({
init: function(e){
alert('jere');
}
});
初始化函数中的警报有效,但接下来我收到错误:
Error while processing route: objects.bc.index Cannot read property 'length' of null TypeError: Cannot read property 'length' of null
通过 ajax 获取模型集合并使用自定义数组 Controller 在模板中显示它的正确方法是什么?
最佳答案
这段代码有很多问题。首先,ArrayController
假设它的模型是一个数组,而您的 model
钩子(Hook)返回一个散列。其次,您的 this.controllerFor("blocks").set('model', blocks)
调用尝试将 Controller 的模型设置为 promise ,这是无用的。您不会像这样在 model
Hook 中设置 Controller 的模型。您可以通过返回模型来设置它,然后通过您的(或默认)setupController
Hook 将模型安装(在解析后)到 Controller 中。
您不应该使用 ArrayController
,它很快就会被弃用,而应该使用普通的旧 Controller 。此 Controller 的模型将是从 model
Hook 返回的哈希值。您需要使用 {{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}}
关于javascript - Emberjs 数组 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30442076/