2016-04-14 6 views
0

Lets sagen, ich habe ein Paar Comboboxen von einfachen Remote-Stores unterstützt. Ich muss einige Aufgaben ausführen, wenn sich die Combobox-Auswahl mit ausgewählten Datensätzen ändert (keine Werte).Wie weisen Sie einer Remote-Combobox einen Wert zu und erhalten einen entsprechenden Datensatz in ExtJS6?

{ 
    xtype: 'combo', 
    reference: 'combo1', 
    store: { 
     type: 'MyStore1', 
    }, 
    displayField: 'name', 
    valueField: 'id', 
    listeners: { 
     select: 'onSelect', 
    }, 
}, 

{ 
    xtype: 'combo', 
    reference: 'combo2', 
    store: { 
     type: 'MyStore2', 
    }, 
    displayField: 'name', 
    valueField: 'id', 
    listeners: { 
     select: 'onSelect', 
    }, 
}, 

//controller 
doTask: function(record1, record2){ 
    console.log(record1.data.name, record2.data.name); 
}, 

onSelect: function(combo, record) { 
    var record1 = this.lookupReference('combo1').getSelection(); 
    var record2 = this.lookupReference('combo2').getSelection(); 
    this.doTask(record1, record2); 
}, 

Jetzt versuche ich doTask() auszulösen, wenn nur id Werten, und endete mit so etwas wie dies oben:

initData: function(id1, id2){ 
    this.lookupReference('combo1').setValue(id1); 
    this.lookupReference('combo2').setValue(id2); 

    var self = this; 
    var waitTimer = Ext.Function.interval(function(){ 

     var record1 = this.lookupReference('combo1').getSelection(); 
     var record2 = this.lookupReference('combo2').getSelection(); 

     if(record1 && record2){ 
      window.clearInterval(waitTimer); 

      this.doTask(record1, record2); 
     } 
    }, 100, self); 
} 

Gibt es einen besseren Weg?

+0

Warum verwenden Sie den Timer hier? Wollen Sie warten, bis die Datensätze mit diesen IDs geladen sind? – JChap

+0

Ja, getSelection() ist null, wenn es sofort aufgerufen wird. Grundsätzlich ist das Problem, wie man fängt, wenn ein Datensatz für den aktuellen Wert geladen wird, damit ich darauf zugreifen kann. – serg

Antwort

0

Sie sollten sich ansehen, ob Ihre Methode mit Werten arbeitet, die Sie durch Eingabe eingegeben haben. Nicht sicher, dass. Sie können auch findRecordByValue mit getValue verwenden. Dies durchsucht das Geschäft mit dem Wert, der entweder durch Auswahl oder durch Eingabe ausgewählt wurde. Auf der anderen Seite kann dies leer erscheinen, z.B. wenn der eingegebene Wert nicht im Speicher ist.