1

私はextjsが初めてです。extjs 4.2 mvc が統合されたアプリケーション asp.net mvc があります。私のアプリケーションにはマルチウィンドウがあります。今、私はボタンとonclickイベントボタンを備えた1つのメニューでウィンドウを開きます。2つの窓があります。各ウィンドウには異なるストアのグリッドがありますが、ウィンドウを開くと、extjs が間違ったストアをロードします。理解できない。ストアは autoload:false を設定しています。しかし、動作しません =(。

UtenteStore.js を保存します。

        Ext.define('MyApp.store.UtenteStore', {
        extend: 'Ext.data.Store',

        requires: [
            'MyApp.model.utenteData'
        ],

        constructor: function (cfg) {
            var me = this;
            cfg = cfg || {};
            me.callParent([Ext.apply({
                autoLoad: false,
                autoSave: false,
                model: 'MyApp.model.utenteData',
                storeId: 'MyJsonStore',
                idProperty: 'Id',
                proxy: proxy
            }, cfg)]);
        }
    });
    var writer = new Ext.data.JsonWriter({
        type: 'json',
        writeAllFields: true,
        allowSingle: false
    });

    var reader = new Ext.data.JsonReader({
        totalProperty: 'total',
        type: 'json',
        successProperty: 'success',
        messageProperty: 'message'
    });

    var proxy = new Ext.data.HttpProxy({
        timeout: 120000,
        noCache: false,
        reader:reader,
        writer: writer,
        type: 'ajax',
       api: {
            read: '/Clienti/Get',
            create: '/Clienti/Update',
            update: '/Clienti/Update',
            destroy: '/Clienti/Delete'
        },
        headers: {
            'Content-Type': 'application/json; charset=UTF-8'
        }
    });

FornitoreStore.js を保存します。

Ext.define('MyApp.store.FornitoriStore', {
    extend: 'Ext.data.Store',

    requires: [
        'MyApp.model.fornitoriData'
    ],

    constructor: function (cfg) {
        var me = this;
        cfg = cfg || {};
        me.callParent([Ext.apply({
            autoLoad: false,
            autoSave: false,
            model: 'MyApp.model.fornitoriData',
            storeId: 'MyJsonStore2',
            idProperty: 'Id',
            proxy: proxy
        }, cfg)]);
    }
});

var writer = new Ext.data.JsonWriter({
    type: 'json',
    writeAllFields: true,
    allowSingle: false
});

var reader = new Ext.data.JsonReader({
    totalProperty: 'total',
    type: 'json',
    successProperty: 'success',
    messageProperty: 'message'
});

var proxy = new Ext.data.HttpProxy({
    timeout: 120000,
    noCache: false,
    reader: reader,
    writer: writer,
    type: 'ajax',
    api: {
        read: '/Fornitori/Lista',
        create: '',
        update: '',
        destroy: ''
    },
    headers: {
        'Content-Type': 'application/json; charset=UTF-8'
    }
});

これは私の最初の Windows Clienti.js です。

var editor = Ext.create('Ext.grid.plugin.CellEditing', {
    clicksToEdit: 1
});

Ext.define('MyApp.view.clienti.Clienti', {
    extend: 'Ext.window.Window',
    height:600,
    width: 800,
    shadow: 'drop',
    collapsible: true,
    title: 'Lista Clienti',
    maximizable: true,
    initComponent: function() {
        var me = this;      
        Ext.applyIf(me, {
            items: [
                {
                    xtype: 'gridpanel',
                    id: 'gridpanelId',
                    header:false,
                    store:'MyApp.store.UtenteStore',
                    forceFit: true,
                    columnLines: true,
                    autoResizeColumns: true,
                    selType: 'rowmodel',
                    columns: [
                        {
                            dataIndex: 'CodiceCliente',
                            text: 'Codice',
                            filter: {
                                type: 'int',
                                minValue: 1
                            }

                        },
                        {
                            xtype: 'gridcolumn',
                            dataIndex: 'DescrizioneCliente',
                            text: 'Descrizione',
                            editor: {
                                xtype: 'textfield',
                                allowBlank: true
                            },
                            filter: true


                        },
                        {
                            xtype: 'datecolumn',
                            dataIndex: 'date',
                            text: 'Date'

                        },
                        {
                            xtype: 'booleancolumn',
                            dataIndex: 'bool',
                            text: 'Boolean'
                        }
                    ],
                    listeners: {
                        afterrender: {
                            fn: me.loadDb,
                            scope: me
                        }
                    },
                    dockedItems: [
                        {
                            xtype: 'toolbar',
                            dock: 'top',
                            items: [
                                {
                                    xtype: 'button',
                                    text: 'Inserisci',
                                    listeners: {
                                        click: {
                                            fn: me.inserisciClick,
                                            scope: me
                                        }
                                    }
                                },
                                {
                                    xtype: 'button',
                                    text: 'Elimina',
                                    listeners: {
                                        click: {
                                            fn: me.eliminaClick,
                                            scope: me
                                        }
                                    }
                                },
                                {
                                    xtype: 'button',
                                    text: 'Salva',
                                    listeners: {
                                        click: {
                                            fn: me.salvaClick,
                                            scope: me
                                        }
                                    }
                                }
                            ]
                        }
                    ],
                    plugins: [editor, {
                        ptype: 'filterbar',
                        renderHidden: false,
                        showShowHideButton: true,
                        showClearAllButton: true
                    }]
                }
            ]
        });

        me.callParent(arguments);
    },
    loadDb: function (component, eOpts) {

    },

    inserisciClick: function (button, e, eOpts) {
        editor.cancelEdit();
        Ext.getCmp('gridpanelId').getStore().insert(0, "");
        editor.startEdit(0, 0);
    },

    eliminaClick: function (button, e, eOpts) {
        var sm = Ext.getCmp('gridpanelId').getSelectionModel();
        Ext.getCmp('gridpanelId').getStore().remove(sm.getSelection());    
    },

    salvaClick: function(button, e, eOpts) {    
        Ext.getCmp('gridpanelId').getStore().sync();      
    }

});

これは私の 2 番目の Windows ListaFornitori.js です。

Ext.define('MyApp.view.fornitori.ListaFornitori', {
    extend: 'Ext.window.Window',

    height: 600,
    width: 900,
    layout: {
        type: 'absolute'
    },
    title: 'Lista Fornitori',

    initComponent: function () {

        var me = this;

        Ext.applyIf(me, {
            items: [
                {

                    xtype: 'tabpanel',
                    activeTab: 0,
                    items: [
                        {
                            xtype: 'panel',
                            title: 'Lista',
                            items: [                                 
                                {
                                    xtype: 'gridpanel',
                                    id: 'grdListaFornitori',
                                    height: 362,
                                    header: false,
                                    store:'MyApp.store.FornitoriStore',
                                    forceFit: true,
                                    columnLines: true,
                                    autoResizeColumns: true,
                                    title: '',
                                    columns: [
                                        {
                                            xtype: 'gridcolumn',
                                            dataIndex: 'CodiceFornitore',
                                            text: 'Codice',
                                            filter: {
                                                type: 'int',
                                                minValue: 1
                                            }
                                        },
                                        {
                                            xtype: 'gridcolumn',
                                            dataIndex: 'DescrizioneFornitore',
                                            text: 'Descrizione',
                                            filter:true
                                        }
                                    ],
                                    plugins: [{
                                        ptype: 'filterbar',
                                        renderHidden: false,
                                        showShowHideButton: true,
                                        showClearAllButton: true
                                    }],

                                    viewConfig: {
                                        preserveScrollOnRefresh: true,

                                        listeners: {
                                            afterrender: {
                                                fn: me.loadDb,
                                                scope: me
                                            },
                                            celldblclick: {
                                                fn: me.editClick,
                                                scope: me
                                            }
                                        }
                                    }
                                }
                            ]
                        }
                    ]
                },
                {
                    xtype: 'button',
                    x: 750,
                    y: 450,
                    text: 'Inserisci',
                    icon: '/Scripts/ext-4.2/resources/ico/add.png',
                    listeners: {
                        click: {
                            fn: me.inserisciClick,
                            scope: me
                        }
                    }
                }
            ]
        });

        me.callParent(arguments);
    },
    loadDb: function (component, eOpts) {

    },
    editClick: function (tableview, td, cellIndex, record, tr, rowIndex, e, eOpts) {
        Ext.create('MyApp.view.fornitori.InsFornitori', { rIx: rowIndex }).show();

    },
    inserisciClick: function(button, e, eOpts) {
        Ext.create('MyApp.view.fornitori.InsFornitori').show();
    }

});

Infine これは私の app.js です:

Ext.Loader.setConfig({
    enabled: true,
    disableCaching: true,
    paths   : {
           'MyApp' : '../MyApp'
        } 
});

Ext.application({
    models: [
        'utenteData',
        'fornitoriData'
    ],
    stores: [
        'MyApp.store.UtenteStore',
        'MyApp.store.FornitoriStore'
    ],
    views: [
        'clienti.Clienti',
        'MyViewport',
        'fornitori.InsFornitori',
        'fornitori.ListaFornitori',
        'fornitori.Fornitori'

    ],
    autoCreateViewport: true,
    name: 'MyApp',
    appFolder: '../MyApp',

});

そして、これは私の構造体です: ここに画像の説明を入力

誰かが私を助けることができますか?立ち往生する日はありますか?私の英語でごめんなさい

4

2 に答える 2

10

次の 2 つの方法があります。

オプション 1: これはテスト済みです。

xtype: 'gridpanel',
id: 'grdListaFornitori',
... ...
listeners: {
        render:{
          scope: this,
          fn: function(grid) {
             //load store after the grid is done rendering
             grid.getStore().load();
          }
       }
    }

オプション 2: このオプションはまだ試していません。しかし、それはうまくいくはずです。

loadDb: function (component, eOpts) {
    component.ownerCt.getStore().load();
},
于 2013-05-27T05:10:45.840 に答える
0

私も extj を使用する初心者ですが、ストアで load() メソッドを呼び出すことはないように見えます。autoLoad プロパティを false に設定しました。それを呼び出してみて、それが機能することを知らせてください。幸運を!

于 2013-05-16T15:20:41.860 に答える