2017-08-29 2 views
0

Ich habe zwei Comboboxen und ich möchte die Combox (b) basierend auf dem ausgewählten Wert von Combobox A deaktiviert werden (ich sollte auf seine Speicherdaten suchen Sie die Datensätze suchen und Wenn der Records-Parameter (arsubOpen) einen Wert 1 enthält, sollte nur I die Combobox B) aktivieren. Dazu habe ich einen ähnlichen Speicher wie A hinzugefügt und einen Filter hinzugefügt, um die Datensätze zu filtern, die nur arsubOpen 1 enthalten. Nun, wie kann ich ihnen ermöglichen, sie basierend auf diesen Speicherdatensätzen zu aktivieren.Wie man eine Komponente basierend auf ViewModel speichern returnd Daten extjs

Test fiddle

Antwort

0

Sie können change Ereignis hören und den neuen Wert mit einem beliebigen Wert Sie die zweite Combobox aktivieren möchten vergleichen:

{ 
    xtype: 'combobox', 
    anchor: '100%', 
    displayField: 'description', 
    valueField: 'adjustmentTypeId', 
    fieldLabel: 'A', 
    // lastQuery: '' to disable store loading a second time on trigger click 
    lastQuery: '', 
    bind: { 
     store: '{a}' 
    }, 
    listeners: { 
     change: function(combo, value) { 
      // Logging a value to console - remove this code 
      console.log(value); 

      var store = combo.getStore(); 
      var record = store.findRecord(combo.valueField, value) 
      var arsubOpen = record.get('arsubOpen'); 
      // Condition for enabling here 
      var shouldEnable = arsubOpen === 1; 

      var form = combo.up('form'); 
      var basicForm = form.getForm(); 
      // 'bField' si the name of the B combobox field 
      var bCombo = basicForm.findField('bField'); 
      bCombo.setDisabled(!shouldEnable); 
     } 
    } 
}, 
{ 
    xtype: 'combobox', 
    anchor: '100%', 
    // Field name to use for form submitting and finding the field 
    name: 'bField', 
    displayField: 'description', 
    valueField: 'arOnlySubCategoryId', 
    fieldLabel: 'B', 
    // lastQuery: '' to disable store loading a second time on trigger click 
    lastQuery: '', 
    bind: { 
     disabled: 'disableB', 
     store: '{B}' 
    } 
} 

A fiddle auf eigene Faust basiert.

Ich warf in lastQuery: '' Konfiguration, um den Laden ein zweites Mal auf den Auslöser klicken zu deaktivieren, was wirklich nervig sein kann und nahm mir eine Menge Stunden, um eine Lösung zu finden.

+0

Danke marathy aber der Schlüssel hier ist zu aktivieren und zu deaktivieren, basierend auf dem anderen Parameter im gleichen Datensatz. Bsp .: \t "arsubOpen": "0" {"adjustmentTypeId": 7, "type": "M", "rechnungsart": "M", "description": "Verschiedenes", "createUserId": "9", " createDateTime ": 1412711611023," updateUserId ":" 21 "," updateDateTime ": 1475603316810," Rechnungscode ":" MS "," categoryCode ":" MS "," aktiv ": true," arsubOpen ":" 0 "} ist der Rekord für Verschiedenes. Also muss ich diesen Datensatz überprüfen und sehen, ob "arsubOpen" 0 oder 1 ist, wenn es 1 ist, muss ich B aktivieren – Sweety

+0

Verwenden Sie die Combobox für etwas anderes? Wenn nicht, können Sie einfach sein 'valueField' als' arsubOpen' definieren. Wenn ja, können Sie 'var record = combo.getStore(). FindRecord (combo.valueField, value)' verwenden. – MarthyM

+0

Ich war im Begriff, denselben Dank zu posten Marthy – Sweety

Verwandte Themen