Ember.js 模型何时连接到控制器?
模型在什么位置连接到控制器?还有,当模型在那里时,有钩子吗 因为我面临以下问题:无法访问模型以使用其中的数据进行一些计算:Ember.js 模型何时连接到控制器?,ember.js,Ember.js,模型在什么位置连接到控制器?还有,当模型在那里时,有钩子吗 因为我面临以下问题:无法访问模型以使用其中的数据进行一些计算: App.ResultsRoute = Ember.Route.extend({ model: function(){ // LOCAL, blocking call! return {messages : this.store.all('message').toArray()}; } }); App.ResultsContr
App.ResultsRoute = Ember.Route.extend({
model: function(){
// LOCAL, blocking call!
return {messages : this.store.all('message').toArray()};
}
});
App.ResultsController = Ember.ObjectController.extend({
init : function(){
this._super();
console.log(this);
console.log(this.get('model'));
console.log(this.get('model.messages'));
this._someComputation();
},
_someComputation : function(){
this.get('model.messages').forEach(function(message){
//do something
}
}
});
这张照片是:
Class { [...] model: messages: Array[58]0: Class1: Class2: [...] Class57: Class length: 58}
null
null
因此,基本上我可以在控制台中看到模型,但当在init
函数中以编程方式访问它时,它不在那里(还没有?)。
或者这是对模型数据进行计算的错误方式(或位置)
编辑:子路由的控制器可以访问模型,因此这可以作为一种解决方法:
App.ResultsIndexController = Ember.Controller.extend({
needs: "results",
parentController : Ember.computed.alias('controllers.results'),
init : function(){
console.log("ResultsIndexController created");
console.log(this.get('parentController').get('model'));
}
});
印刷品:
ResultsIndexController created
{messages: Array[55]}
但我更希望它位于父控制器中,以便所有子控制器都可以访问它。它在
setupController
过程中连接,该过程发生在初始化之后的路由中,当模型已解析时。代码基本上如下所示:
App.ResultsRoute = Ember.Route.extend({
model: function(){
// LOCAL, blocking call!
return {messages : this.store.all('message').toArray()};
},
setupController: function(controller, model){
controller.set('model', model);
}
});
如果您想在setupController
期间执行此操作,通常会覆盖它以添加其他功能
App.ResultsRoute = Ember.Route.extend({
model: function(){
// LOCAL, blocking call!
return {messages : this.store.all('message').toArray()};
},
setupController: function(controller, model){
this._super(controller, model);
controller._someComputation();
}
});
另外,您的模型钩子说这是一个阻塞调用,但您没有返回承诺,因此这不是真的(但可能只是一个复制粘贴foo)文档声明
store.all()
直接返回RecordArray
,而store.find()
返回承诺,所以我假设这是阻塞,但我肯定是错的。如果您将store.find()返回到模型挂钩,它会工作,但如果您返回{foo:store.find()},则不会工作。那它就不会知道这个物体里隐藏着一个承诺。