我有两个ViewController。 如果我在树形图中选择一个项目,则第一个会触发事件:
// treeController
onItemSelection: function(treeview, record) {
var me = this,
controller = me.getView().getController();
...
controller.fireEvent('myEvent', record);
}
第二个是听这个事件。 控制器负责将文件上载到指定的URL。 此URL由onMyEvent函数设置。
// uploadController
...
listen: {
controller: {
'*': {
myEvent: 'onMyEvent'
}
}
},
defaultUrl: 'foo/bar/{id}',
currentUrl: null,
onMyEvent: function(record) {
var me = this;
me.currentUrl = me.defaultUrl.replace('{id}', record.getId());
},
onUploadClick: function (form) {
var me = this;
if (form.isValid()) {
form.submit({
url: me.currentUrl,
...
});
}
},
...
我想要实现的目标: 我在treepanel中选择一个项目 - >事件被触发,onMyEvent函数已被执行。
我点击按钮打开uploadView(连接到控制器的视图)。之后,我点击文件上传按钮,选择一个文件,然后点击上传按钮。 按下upload按钮后,控制器应调用onUploadClick函数并使用先前放置的url(currentUrl)进行上载。
我面临的问题:
选择treepanel中的项会触发事件,但uploadController不执行onMyEvent函数。 当我首先打开uploadView并在面板中选择一个节点后,执行onMyEvent函数。
当我使用第二种方法并尝试上传文件时,我收到一条错误消息,告诉我我没有指定该网址(它为空)。
如何在不使用上述解决方法的情况下完成此过程。?
提前致谢。
答案 0 :(得分:1)
您的活动myEvent
位于UploadController
。但是,controller.fireEvent('myEvent', record);
会尝试在TreeController
中找到并触发它。
此问题的根本原因是controller = me.getView().getController();
将返回this
/ TreeController
的实例。当您执行me.getView()
时,它会为您提供TreeView
,而me.getView().getController()
会返回TreeController
的实例,您需要UploadController
myEvent
的实例{1}}是UploadController
的事件。
您首先打开UploadView
时触发事件的原因是因为您已经在UploadController
。
希望有所帮助!