Javascript 从路由访问控制器';s before模型
我想从路由上的beforeSend钩子中访问路由的控制器,以利用承诺上的暂停逻辑 这是我当前的解决方法,可以在我的控制器上设置“category_config”,这是从beforeModel中的承诺中获得的Javascript 从路由访问控制器';s before模型,javascript,ember.js,rsvp.js,Javascript,Ember.js,Rsvp.js,我想从路由上的beforeSend钩子中访问路由的控制器,以利用承诺上的暂停逻辑 这是我当前的解决方法,可以在我的控制器上设置“category_config”,这是从beforeModel中的承诺中获得的 Imaging.ReferenceRoute = Ember.Route.extend(Imaging.Ajax, { setupController: function(controller, model) { controller.set('error_messages',
Imaging.ReferenceRoute = Ember.Route.extend(Imaging.Ajax, {
setupController: function(controller, model) {
controller.set('error_messages', []);
controller.set('category_config', this.get('category_config'));
return this._super(controller, model);
},
beforeModel: function(transition) {
var categories;
categories = this._promise("/url/foo/", "GET");
return Ember.RSVP.all([categories]).then(((function(_this) {
return function(response) {
return _this.set('category_config', response[0]);
};
})(this)));
},
model: function() {
return Imaging.Document.find();
}
});
如果您好奇,我的_promisehelper如下:
_promise: function(url, type, hash) {
return new Ember.RSVP.Promise(function(resolve, reject) {
hash = hash || {};
hash.url = url;
hash.type = type;
hash.dataType = "json";
hash.success = function(json) {
return Ember.run(null, resolve, json);
};
hash.error = function(json) {
if (json && json.then) {
json.then = null;
}
return Ember.run(null, reject, json);
};
return $.ajax(hash);
});
}
如果不让beforeModel在路由上设置“category_config”,然后在setupController中的控制器上设置它,我怎么能做到这一点呢?未测试,但我认为您可以返回一个带有
Imaging.Document.find()
和\u promise(“/url/foo/”,“GET”)的元组代码>,使用
这是一个更干净的方法。谢谢不客气!如果这解决了你的问题,你能接受吗?@MarcioJunior这就是我喜欢stackoverflow的原因。这个杂烩正是我需要的
Imaging.ReferenceRoute = Ember.Route.extend(Imaging.Ajax, {
setupController: function(controller, model) {
controller.set('error_messages', []);
controller.set('category_config', model.category_config);
return this._super(controller, model.document);
},
model: function() {
return Ember.RSVP.hash({
document: Imaging.Document.find(),
category_config: this._promise("/url/foo/", "GET")
});
}
});