查看访问控制器中定义的函数(最佳方式)

时间:2014-07-22 17:06:45

标签: extjs4

我希望我的视图访问功能已在我的控制器中定义。

如果我在控制器中定义了一个函数,那么代码可以工作,如果不是我得到错误'未捕获的ReferenceError:未定义了refreshSelection'

什么是错的?

查看

initComponent: function() {


    this.dockedItems = [
        {
            xtype: 'toolbar',
            items: [
                {
                    text: 'Importar',
                    action: 'selimp',
                    tooltip: 'Importar TXT'
                },{
                    text: 'Excluir',
                    action: 'delete',
                    tooltip: 'Deletar Registros'
                },{
                    text: 'Excluir Todos',
                    action: 'deleteAll',
                    tooltip: 'Deletar todos os Registros'
                },{
                    text: 'Transferir Dados',
                    action: 'transfDados',
                    tooltip: 'Transferencia de registros'
                }
            ]
        },{
            xtype: 'pagingtoolbar',
            dock: 'bottom',
            store: 'GridStore',
            displayInfo: true,
            emptyMsg: "Nenhum registro encontrado."
        }
    ];


    this.callParent(arguments);


    this.getView().on('refresh', refreshSelection , this);
    this.selModel.on('select', selectRow , this);
    this.selModel.on('deselect', deselectRow , this);


}

控制器

Ext.define('ImpPdf.controller.GridControl', {
extend: 'Ext.app.Controller',


stores: ['GridStore'],
models: ['Espelho'],
views: ['GridView'],


refs: [ {ref: 'GridV',selector: 'grid'} ],


init: function() {


    //declaracao dos controles dos botoes
    this.control({
        'gridV': {
            deselect: this.deselectRow
        },
        'gridV': {
            select: this.selectRow
        },
        'gridV': {
            refresh: this.refreshSelection
        }

    });
},
selectRow: function(){
    console.log('selectRow-1');
},
deselectRow: function(){
    console.log('deselectRow-1');
},
refreshSelection: function(){
    console.log('refreshSelection-1');
},

........

1 个答案:

答案 0 :(得分:0)

你做错了! 您无法使用Controller Reference来发出控制器操作。 而是使用与网格相同的类似CSS的选择器。

所有功能必须在您的控制器中。控制器动作(this.Control)将函数与事件绑定。

您的控制器必须如下所示:

Ext.define('ImpPdf.controller.GridControl', {
    extend: 'Ext.app.Controller',

    refs: [
        {
            ref: 'GridV',
            selector: 'grid'
        }
    ],

    selectRow: function(rowmodel, record, index, eOpts) {
       console.log('Foo');
    },

    init: function(application) {
        this.control({
            "grid": {
                select: this.selectRow
            }
        });
    }

});

在您的视图中,只需删除业务代码。

Ext.define('ImpPdf.view.MyViewport', {
    extend: 'Ext.container.Viewport',

    requires: [
        'Ext.grid.Panel',
        'Ext.grid.column.Number',
        'Ext.grid.column.Date',
        'Ext.grid.column.Boolean',
        'Ext.grid.View',
        'Ext.toolbar.Paging'
    ],

    initComponent: function() {
        var me = this;

        Ext.applyIf(me, {
            items: [
                {
                    xtype: 'gridpanel',
                    title: 'My Grid Panel',
                    store: 'GridStore',
                    columns: [
                        {
                            xtype: 'gridcolumn',
                            dataIndex: 'string',
                            text: 'String'
                        },
                        {
                            xtype: 'numbercolumn',
                            dataIndex: 'number',
                            text: 'Number'
                        },
                        {
                            xtype: 'datecolumn',
                            dataIndex: 'date',
                            text: 'Date'
                        },
                        {
                            xtype: 'booleancolumn',
                            dataIndex: 'bool',
                            text: 'Boolean'
                        }
                    ],
                    dockedItems: [
                        {
                            xtype: 'pagingtoolbar',
                            dock: 'bottom',
                            width: 360,
                            displayInfo: true,
                            store: 'GridStore'
                        }
                    ]
                }
            ]
        });

        me.callParent(arguments);
    }

});