0

我有两个 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,
                    ...
                });
            }
        },
    ...

我想要实现的目标:我在树面板中选择一个项目-> 事件被触发,onMyEvent 函数已被执行。

我单击按钮打开uploadView(连接到控制器的视图)。之后,我将单击文件上传按钮,选择一个文件并单击上传按钮。按下上传按钮后,控制器应调用 onUploadClick 函数并使用之前放置的 url (currentUrl) 进行上传。

我面临的问题:

  1. 在树形面板中选择一个项目会触发事件,但 uploadController 没有执行 onMyEvent 函数。当我首先打开uploadView 然后在面板中选择一个节点时,会执行onMyEvent 函数。

  2. 当我使用第二种方法并尝试上传文件时,我收到一个错误,告诉我我没有指定 url(它的 null)。

如何在不使用上述解决方法 1. 的情况下完成该过程?

提前致谢。

4

1 回答 1

1

您的活动myEventUploadController. 但是,controller.fireEvent('myEvent', record);会尝试在TreeController.

这个问题的根本原因是controller = me.getView().getController();会给你返回this/instance of TreeController. 当你这样做时me.getView(),它会给你TreeView并且me.getView().getController()将给你一个实例,TreeController而你需要一个实例,UploadController原因myEvent是一个事件UploadController

您在第一次打开时能够触发事件的UploadView原因是因为您已经在UploadController.

希望有帮助!

于 2015-10-23T14:50:16.037 回答