0

ExtJs を使用してアプリケーションを開発しています。機能の 1 つは、既に保存されているレコードを編集することです。編集する行を選択するグリッドがあり、編集する情報を含むパネルが表示されます。しかし、編集できる属性の 1 つは、構成と呼ばれる私のシステムの別のオブジェクトであり、この構成には ID があり、レジストリを編集すると読み込まれます。問題は、編集できるグリッドのアイコンをクリックすると、最初に ID が取得され、2 回目に ID が表示されなくなり、3 回目に次のエラーが表示されることです。

Uncaught TypeError: Cannot read property 'id' of undefined Grid.js:36
Ext.define.columns.items.handler Grid.js:36
Ext.define.processEvent 
Ext.define.processEvent Table.js:755
fire ext-debug.js:8583
Ext.define.continueFireEvent Observable.js:352
Ext.define.fireEvent Observable.js:323
Ext.override.fireEvent EventBus.js:22
Ext.define.processItemEvent Table.js:844
Ext.define.processUIEvent View.js:475
Ext.define.handleEvent View.js:404
(anonymous function)
Ext.apply.createListenerWrap.wrap 

私のコードは(編集アイコンをクリックしたとき):

icon : Webapp.icon('editar.png'),
tooltip : 'Editar',
handler: function(view, rowIndex, colIndex, item, e) {                      
var record = Ext.getStore('EstacaoStore').getAt(rowIndex);
var form = Ext.create('PanelNovaEstacao');
record.set('modoIgnorar', record.data.modoIgnorar); 
record.set('latitude', record.data.latitude);   
record.set('longitude', record.data.longitude);
record.set('reiniciar', record.data.reiniciar);             
record.set('configuracaoCombo', record.data.configuracao.id);
record.set('ativar', record.data.ativar);
record.set('tipoColetor', record.data.tipoColetor);
form.loadRecord(record);
Ext.create('Ext.window.Window', {
title : 'Cadastro',
layout : 'fit',
modal : true,
width : 500,
height : 350,
items : [ form ]
}).show();              

「PanelNovaEstacao」のコードは次のとおりです。

Ext.define('PanelNovaEstacao', {
extend : 'Ext.form.Panel',
title : 'Painel',
initComponent : function() {

    var combo = Ext.create('ComboBoxConfiguration', {
                name : 'configuracao'
            });

    Ext.apply(this, {
        bodyPadding : '10 0 0 10',
        items : [ {
            xtype : 'hiddenfield',
            name : 'id'
        }, {
            xtype : 'hiddenfield',
            name : 'numeroSerieAntigo'
        }, {
            xtype : 'numberfield',
            fieldLabel : 'Número de série',
            name : 'numeroSerie',
            minValue : 0,
            allowBlank : false
        }, combo
        {
            xtype: 'numberfield',
            fieldLabel: 'Latitude',
            name: 'latitude'
        }, {
            xtype: 'numberfield',
            fieldLabel: 'Longitude',
            name: 'longitude'
        },{
            xtype: 'radiogroup',
            fieldLabel : 'Estado',
            items : [ {
                boxLabel : 'Ativo',
                inputValue : true,
                checked: true,
                name : 'ativar'
            }, {
                boxLabel : 'Inativo',
                inputValue : false,
                name : 'ativar'
            } ]
        }, {
            xtype : 'checkbox',
            fieldLabel : 'Modo ignorar',
            name : 'modoIgnorar'
        }, {
            xtype : 'checkbox',
            fieldLabel : 'Reiniciar',
            name : 'reiniciar'
        }, {
            xtype : 'button',
            text : 'Salvar',
            textAlign : 'center',
            action : 'salvar'
        } ]
    });

    this.callParent(arguments);
}

});

ComBoxConfiguration コード:

Ext.define('ComboBoxConfiguration', {
extend : 'Ext.form.ComboBox',
store : 'ConfiguracaoStore',
fieldLabel : 'Configurações',
displayField : 'id'

});

誰が何が起こっているのか知っていますか?? ありがとう!

4

2 に答える 2

0

この行が問題を引き起こしている可能性があります。record.set('configuracaoCombo', record.data.configuracao.id);

プロキシから返されるデータにはconfiguracaoプロパティがないため、アクセスすると と評価されundefined、その時点でサブプロパティにアクセスしようとするidと、表示されているエラーが発生します。

のデータとEstacaoStore、ストアのプロキシ (またはロード方法) によって何が返されているかを確認してください。そこに問題が見つかる可能性があります。

于 2012-07-23T16:32:13.353 に答える
0

行内をクリックしてコードを実行すると: var record = Ext.getStore('EstacaoStore').getAt(rowIndex); console.log(記録); 返されるオブジェクトは次のとおりです: (configuracao は configuracaoEstacao と同義です)

ここに画像の説明を入力

于 2012-07-23T18:09:15.873 に答える