extjs redirectTo方法从另一个控制器调用两次

时间:2015-06-16 14:30:40

标签: extjs extjs5

问题在于redirectTo两次调用onLoad方法。在我的主视口中,额外的视图是动态加载的。

拥有主视口

Ext.define('MyApp.main.view.MainView', {
    extend: 'Ext.container.Container',
    id: 'mainViewPort',
    requires: [
        'MyApp.main.controller.MainViewController',
    ],
    xtype: 'app-main',
    controller: 'main',
    viewModel: {
        type: 'main'
    },
    layout: {
        type: 'border'
    },
    items: [{
        region: 'center'
    }]
});

视口控制器

Ext.define('MyApp.main.controller.MainViewController', {
    extend: 'Ext.app.ViewController',
    alias: 'controller.main',
    onClickQueryResponses: function() {
        var panelToAddName = Ext.create('MyApp.requests.view.QueryResponsesGridView', {});
        var mainViewPort = Ext.getCmp('mainViewPort');
        var centerRegion = mainViewPort.down('[region=center]');
        centerRegion.removeAll();
        centerRegion.add(panelToAddName);
    }
});

查看'MyApp.requests.view.QueryResponsesGridView'

Ext.define('MyApp.requests.view.QueryResponsesGridView', {
    extend: 'Ext.grid.Panel',
    requires: [
        'MyApp.requests.controller.QueryResponsesGridViewController'
    ],
    controller: 'queryResponsesGrid',
    dockedItems: [{
            xtype: 'toolbar',
            items:[{
                xtype: 'button',
                margin: '0 30 0 4',
                handler: 'onClickQuerySearch'
            }]
        }]
    });
});

视图'MyApp.requests.view.QueryResponsesGridView'

的控制器
Ext.define('MyApp.requests.controller.QueryResponsesGridViewController', {
    extend: 'Ext.app.ViewController',
    alias: 'controller.queryResponsesGrid',
    routes : {
        'responses': {
            action  : 'onLoad'
        }
    },
    onLoad: function() {
        this.redirectTo('responses');
        alert('!');
    },
    onClickQuerySearch: function() {
        this.onLoad();
    },
});

当我点击带有处理程序onClickQuerySearch警告('!')的按钮运行两次时,有人知道为什么吗?

这里是小提琴https://fiddle.sencha.com/#fiddle/oqb

1 个答案:

答案 0 :(得分:3)

我认为您不需要使用redirectTo方法拨打onLoad。您基本上是在创建一个自引用循环。 redirectTo然后再次致电onLoad

我想您可能想要redirectTo中的onClickQuerySearch而不是直接致电onLoad

Ext.define('MyApp.controller.QueryResponsesGridViewController', {
    extend: 'Ext.app.ViewController',
    alias: 'controller.queryResponsesGrid',
    routes : {
        'responses': {
            action  : 'onLoad'
        }
    },
    onLoad: function() {
        alert('!');
    },
    onClickQuerySearch: function() {
        this.redirectTo('responses');
    }
});