我想从afterModel
内的其他路径(问题)访问applicationController。
主要目标是在解析承诺模型后更改应用程序的背景。
这是我的issue.js
:
import Ember from 'ember';
export default Ember.Route.extend({
needs: ['application'],
model: function(params) {
[... some code ...]
},
afterModel: function(model, transition) {
model.issue.then(function(resolvedIssue) {
// I'm looking to access the controller here
var theOtherController = this.get('controllers.application');
return resolvedIssue;
});
}
});
我尝试了几种组合,没有成功。 当我尝试在控制台中记录内容时,我收到一条try / catch错误消息。
这样做的正确方法是什么?
答案 0 :(得分:0)
您的代码中有几处错误。首先,issue
中没有model.issue.then(...)
路由的范围,因此get('controller')
无效。其次,needs
语句仅对控制器有效,而不对路由有效。
您应该在issue
路线中发送操作,并使用ember冒泡操作在application
路线中捕捉它。
发送的所有操作都会通过最多application
路由的路由冒泡。如果application
路由未处理此操作,则会引发错误。看一下应该在issue
路线中的代码:
afterModel: function(model, transition) {
var _this = this;
model.issue.then(function(issue) {
_this.send('changeLayout', issue.get('image'));
});
}
在您的申请路线中,您可以抓住该行动,例如在应用程序控制器上执行一些方法:
toggleLayout: function(desiredImage) {
// time to actually change the image here
console.log("let's display " + desiredImage);
}
application
路线:
actions: {
changeLayout: function(desiredImage) {
this.get("controller").toggleLayout(desiredImage);
return false; // make sure to stop bubbling up!
}
}
它比使用任何类型的needs
更好,因为它完全涵盖了数据向下操作的惯例。