2011-08-25 2 views
0

J'ai beaucoup de mal à accéder à une variable qui est un attribut d'un FromPanel étendu provenant d'un gestionnaire de boutons du formulaire. Si quelqu'un pouvait offrir de l'aide, je l'apprécierais grandement.Attributs d'objet ExtJS étendus dans le gestionnaire de boutons

forme Exemple où je tente d'accéder monAttribut à partir du gestionnaire de updateUnitsButton:

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); 
    } 
}); 

Répondre

3

Vous pouvez le faire en utilisant deux façons.

  • Le premier

utilisant fermeture:

// ... 
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 
}); 
// ... 
  • Le second

en envoyant la variable de portée de gestionnaire:

// ... 
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); 
// ... 
+0

Merci beaucoup, vous avez littéralement sauvé ma journée – James

+0

@James, pas de problème :) Je suis heureux d'aider –

Questions connexes