0

フォームのボタン ハンドラー内から、拡張された FromPanel の属性である変数にアクセスするのが非常に困難です。誰かが助けを提供できれば、私はそれを大いに感謝します.

updateUnitsButton のハンドラー内から myAttribute にアクセスしようとするフォームの例:

TrainOverviewPanel = Ext.extend(Ext.FormPanel, {
    myAttribute: undefined
    ,initComponent:function() {
        var unitIdField1 = new Ext.form.TextField({
            itemId: 'unitIdField1',
            flex: 1
        });
        var unitIdField2 = new Ext.form.TextField({
            itemId: 'unitIdField2',
            flex: 1
        });
        var unitIdField3 = new Ext.form.TextField({
            itemId: 'unitIdField3',
            flex: 1
        });
        var unitIdFields = new Ext.form.CompositeField({
            itemId: 'unitIdFields',
            items: [unitIdField1, unitIdField2, unitIdField3],
            width: 200
        });

        var updateUnits = function() {
            alert("How can I access attribute: " + this.myAttribute);
        }
        var updateUnitsButton = new Ext.Button({
            tdoId: undefined,
            text: 'Update',
            handler: updateUnits,
            width: 50
        });

        var updatableUnitIdFields = new Ext.form.CompositeField({
            readOnly: false,
            fieldLabel: 'Unit ID',
            itemId: 'updatableUnitIdFields',
            items: [unitIdFields, updateUnitsButton],
            width: 300
        });

        Ext.apply(this, {
            width: 450,
            height: 130,
            margins:'10 0 0 0',
            items:  [ updatableUnitIdFields ]
        });
        TrainOverviewPanel.superclass.initComponent.apply(this, arguments);
    }

    ,onRender:function() {
        TrainOverviewPanel.superclass.onRender.apply(this, arguments);
    }

    ,refresh: function(data) {
        this.myAttribute = data.myAttribute;
        var unitIdFields = this.getComponent('updatableUnitIdFields').items.get(0);
        unitIdFields.items.get(0).setValue(data.stockId1);
        unitIdFields.items.get(1).setValue(data.stockId2);
        unitIdFields.items.get(2).setValue(data.stockId3);
    }
});
4

1 に答える 1

3

2 つの方法を使用してそれを行うことができます。

  • 最初の1つ

閉鎖を使用して:

// ...
var me = this;
var updateUnits = function() {
    alert("How can I access attribute: " + me.myAttribute);
};
var updateUnitsButton = new Ext.Button({
    tdoId: undefined,
    text: 'Update',
    handler: updateUnits,
    width: 50
});
// ...
  • 2つ目

スコープ変数をハンドラーに送信することにより:

// ...
var updateUnits = function() {
    alert("How can I access attribute: " + this.myAttribute);
};
var updateUnitsButton = new Ext.Button({
    tdoId: undefined,
    text: 'Update',
    //handler: updateUnits,
    width: 50
});
updateUnitsButton.on('click', updateUnits, this);
// ...
于 2011-08-25T12:01:43.230 に答える