0

コントローラーからリストを更新中に問題に直面しています。Jsonデータを表示するストア、モデル、リストがあります。データを取得できましたが、リストを更新できませんでした。私のストアでajax呼び出しを行うと、リストを使用してデータを取得できますが、リスナーが呼び出されません。そのため、コードをコントローラーに移動しました。ここに私の店です:

Ext.define('MyApp.store.StoreList', {
    extend:'Ext.data.Store',
    requires:['MyApp.model.ModelList'],
    config:{
        model:'MyApp.model.ModelList',
        autoLoad:'true',
        storeId:'id_StoreList'
    }
});

モデル:

Ext.define('MyApp.model.ModelList', {
    extend: 'Ext.data.Model',
    xtype:'modelList',
    config: {
        fields:['name']
}
});

コントローラ

Ext.define('MyApp.controller.Main', {
extend : 'Ext.app.Controller',
requires : ['MyApp.view.MyList'],
config : {
    refs : {
        loadbtn:'button[action=loadbtn]',
        dataList: '#id_listitems'


    },
    control : {
        "#dataList": {
            itemtap: 'onListItemTap'
        },
        loadbtn:{
            tap : 'handleloadbtn'
        }

    }

},

handleloadbtn: function(){
    console.log('loadbtn tapped');
    Ext.Viewport.setMasked({xtype:'loadmask',message:'loading...'});
    this.ajaxCall();
},

ajaxCall:function(){
    Ext.Ajax.request({
        method: 'POST',
        scope: this,
        extraParams: {
            Details: true
        },

        url:'http://localhost:9080/works',
        actionMethods: {
            create : 'POST',
            read   : 'POST', // by default GET
            update : 'POST',
            destroy: 'POST'
        },
        headers :{
            "Content-Type" :'application/xml',
            'Accept':'application/json'
        },
        reader:
        {
            type:'json'
        },
        success: function(response){
            console.log('success');

            // var list = Ext.getCmp('id_listitems')
            //var store = Ext.getStore('id_StoreList');
            var store = Ext.data.StoreManager.lookup('id_StoreList');
            this.getDataList().setStore(store);
           //Error : Uncaught ReferenceError: getDataList is not defined 
            console.log('test:',test);
            Ext.Viewport.setMasked(false);
        }
    })
}

});

リスト:

Ext.define('MyApp.view.MyList',{
    extend:'Ext.Panel',
    xtype:'myList',
    requires:['Ext.dataview.List'],
    config:{
        layout:'fit',
        styleHtmlContent:'true',
        styleHtmlCls:'showListCls',
        items:[
            {
                docked:'top',
                items:[
                    {
                        xtype:'button',
                        text:'Load',
                        ui:'Plain',
                        action:'loadbtn',
                        width:'180px',
                        height:'30px',
                        docked:'right',
                        margin : '5 15 5 0'
                    }
                ]
            },
            {
                xtype:'list',
                id: 'id_listitems',
                action:'list_Item_Action',
                store:'StoreList',
                itemTpl:['{name}'
                ]
            }
        ]
    }
});

誰でもこれを解決するのを手伝ってもらえますか? ありがとう。

4

2 に答える 2

0

this.getDataList()次のように使用する必要があります。

Ext.Ajax.request({
    method: 'POST',
    extraParams: {
        Details: true
    },

    url:'http://localhost:9080/works',
    actionMethods: {
        create : 'POST',
        read   : 'POST', // by default GET
        update : 'POST',
        destroy: 'POST'
    },
    headers :{
        "Content-Type" :'application/xml',
        'Accept':'application/json'
    },
    reader:
    {
        type:'json'
    },
    success: function(response){
        console.log('success');

        // var list = Ext.getCmp('id_listitems')
        //var store = Ext.getStore('id_StoreList');
        var store = Ext.data.StoreManager.lookup('id_StoreList');
        this.getDataList().setStore(store);
       //Error : Uncaught ReferenceError: getDataList is not defined 
        console.log('test:',test);
        Ext.Viewport.setMasked(false);
    },
    scope: this
});

また、メソッドがリクエストではなくコントローラーにscope: thisなるように、リクエスト構成オブジェクトに追加する必要があります。thissuccess

お役に立てれば。

于 2013-04-13T08:52:04.910 に答える