У меня вопрос по поводу Ext Js контроллера и кнопки просмотра события - PullRequest
0 голосов
/ 21 апреля 2020

У меня вопрос по поводу Ext Js контроллера и просмотра событий! я пытался построить этот код по MVC модели. поэтому я попытался подключить контроллер. js от основного. js, который является представлением. и я определяю контроллер, модель, хранилище в приложении. js как состояние c (я не уверен, что это правильно ...)

, но проблема в том, что я вижу основной вид на сайте после запуска main. js. но когда я нажимаю кнопку, чтобы произошло событие, ничего не происходит.

Я не знаю, что я сделал не так. я проверил заклинание и контекстную ошибку столько, сколько смог. но я не смог найти никакой ошибки ..

вот мой код ниже.

Приложение. js

Ext.define('GridMvcApp.Application', {
    extend:'Ext.app.Application',

    name:'GridMvcApp',

    controllers:['AppController'],
    stores:[
        // TODO: add global / shared stores here
        'UserStore'
    ],
    models:[
        'UserModel'
    ],
    launch: function () {
        // TODO - Launch the application
    },

});

Main. js

Ext.define('GridMvcApp.view.main.Main', {
    extend: 'Ext.panel.Panel',
    alias:'widget.main',
    title:'Grid MVC',
    width:600,
    height:400,
    bodyPadding:'5 5 5 5',

    items:[{
        items:[{
            xtype:'fieldset',
            padding:'5 5 5 5',
            title:'lookup',
            width:'100%',
            layout:'hbox',

            items:[
            {
                xtype:'textfield',
                fieldLabel:'NICKNAME',
                labelAlign:'right',
                name:'nickname'
            }, {
                xtype:'tbspacer',
                flex:1
            },{
                xtype:'button',
                name:'btnSearch',
                text:'LOOKUP',
            }]
        }]
    }, {
            xtype:'tbspacer',
            height:10
            },
            {
            xtype:'grid',
            name:'gridUser',
            width:'100%',
            height:250,
            columnLines:true,
            columns:[
            {
                text:'NUBERING',
                xtype:'rownumberer',
                width:80,
            }, {
                text:'USERID',
                dataIndex:'userid',
                flex:2
            }, 
            {
                text:'NICKNAME',
                dataIndex:'nickname',
                flex:2
            },{
                text:'EMAIL',
                dataIndex:'email',
                flex:2
            }
         ]
    }],
});

AppController. js

Ext.define('GridMvcApp.controller.AppController',{

    extend:'Ext.app.Controller',
    refs:{
        nickname:'main textfield[name=nickname]',
        gridUser:'main grid[name=gridUser]'
    },
    control:{
        'Main button[name==btnSearch]':{
            click:'onSearch'
        },
        'Main grid[name=gridUser]':{
            afterrender:'onRender'
        }
    },

    onRender:function(){
        console.log('4');
        this.getGridUser().setStore(Ext.getStore('UserStore'));

    },
    onSearch:function(button,e,eOpts){
        var me=this;
        var nickname=this.getNickname().getValue();
        console.log('5', nickname),
        Ext.getStore('UserStore').load({
            params:{
                searchNickName:nickName
            },
            callback:me.onGetUserInfo
        });
    },
    onGetUserInfo:function(records,operation, success){
        if(success==true){
            console.log('success is true');
        }
        else{
            console.log('success is false');
            Ext.Msg.alert('error', this.getProxy().getReader().rawData.msg);
        }
    }

});

1 Ответ

0 голосов
/ 29 апреля 2020

Сначала необходимо указать псевдоним для контроллера.

Ext.define('GridMvcApp.controller.AppController',{
    extend:'Ext.app.Controller',

    //give alias name 
    alias: 'controller.gridMVCAppController',

    refs:{
        nickname:'main textfield[name=nickname]',
        gridUser:'main grid[name=gridUser]'
    },
    control:{
        'Main button[name==btnSearch]':{
            click:'onSearch'
        },
        'Main grid[name=gridUser]':{
            afterrender:'onRender'
        }
    },

    onRender:function(){
        console.log('4');
        this.getGridUser().setStore(Ext.getStore('UserStore'));

    },
    onSearch:function(button,e,eOpts){
        var me=this;
        var nickname=this.getNickname().getValue();
        console.log('5', nickname),
        Ext.getStore('UserStore').load({
            params:{
                searchNickName:nickName
            },
            callback:me.onGetUserInfo
        });
    },
    onGetUserInfo:function(records,operation, success){
        if(success==true){
            console.log('success is true');
        }
        else{
            console.log('success is false');
            Ext.Msg.alert('error', this.getProxy().getReader().rawData.msg);
        }
    }

});

Затем необходимо указать имя соответствующего класса контроллера и имя псевдонима в файле представления, как показано ниже:

Ext.define('GridMvcApp.view.main.Main', {
    extend: 'Ext.panel.Panel',
    alias:'widget.main',
    title:'Grid MVC',
    width:600,
    height:400,
    bodyPadding:'5 5 5 5',

    //add the controller reference
    requires:[
        'GridMvcApp.controller.AppController'
    ],

    //alias name reference
    controller: 'gridMVCAppController',

    items:[{
        items:[{
            xtype:'fieldset',
            padding:'5 5 5 5',
            title:'lookup',
            width:'100%',
            layout:'hbox',

            items:[
            {
                xtype:'textfield',
                fieldLabel:'NICKNAME',
                labelAlign:'right',
                name:'nickname'
            }, {
                xtype:'tbspacer',
                flex:1
            },{
                xtype:'button',
                name:'btnSearch',
                text:'LOOKUP',
            }]
        }]
    }, {
            xtype:'tbspacer',
            height:10
            },
            {
            xtype:'grid',
            name:'gridUser',
            width:'100%',
            height:250,
            columnLines:true,
            columns:[
            {
                text:'NUBERING',
                xtype:'rownumberer',
                width:80,
            }, {
                text:'USERID',
                dataIndex:'userid',
                flex:2
            }, 
            {
                text:'NICKNAME',
                dataIndex:'nickname',
                flex:2
            },{
                text:'EMAIL',
                dataIndex:'email',
                flex:2
            }
         ]
    }],
});
...