我正在为ember 1.7.0中的ajax操作做一个基本的例子,我所做的是在路由中有一个模型,并为原始数据做了一个ajax get。
App.IndexRoute=Em.Route.extend({
model:function(){
return Em.$.get('data.json');
},
}
现在在控制器中我想为模板修改它,我试过
App.IndexController = Ember.Controller.extend({
init:function(){this._super();
var newmodel=this.get('content');
....some modification...
this.set('model',newmodel);
}
}
但这不起作用。
那么基本上如何修改模型?这应该在setupController或控制器中? 如果需要如何在控制器中获取和设置模型?另一个困惑是何时创建以及何时扩展控制器和路由?
感谢。
答案 0 :(得分:2)
在你的路线中寻找setupController
钩子
App.IndexRoute = Em.Route.extend({
model: function() {
return Em.$.get('data.json');
},
setupController: function(controller, model) {
this._super(controller, model);
//Some modifications
//..
//end of modificaitons
controller.set('model', model);
}
});
答案 1 :(得分:2)
extend()
用于为任何类创建子类,例如Ember.ArrayController
。如果要覆盖现有类的属性(方法),可以使用extend。
create()
用于创建类的新实例。请参阅此http://emberjs.com/guides/object-model/classes-and-instances/
在您想要为控制器设置任何属性之前,无需使用setupController
的{{1}}挂钩。
如果您的Route有模型钩子并返回数据,那么您可以使用
直接在控制器中访问模型Route
同时您可以使用setter更新/修改模型。
var model = this.get('model');
查看简单的bin http://jsbin.com/fesux/edit
请看看Ember.set和Ember.get
答案 2 :(得分:1)
您可以使用setupController来处理此
App.IndexRoute=Em.Route.extend({
model:function(){
return Em.$.get('data.json');
},
setupController: function(controller, model){
controller.set('model',model);
}
}
setupController挂钩接收路由处理程序的关联控制器作为其第一个参数。在这种情况下,IndexRoute的setupController接收应用程序的App.IndexController实例。
默认的setupController挂钩将关联控制器的model属性设置为路由处理程序的模型。
如果要配置与路由处理程序关联的控制器以外的控制器,请使用controllerFor方法。
此处有更多详情: http://emberjs.com/guides/routing/setting-up-a-controller/