ExtJs - Renderer für remote-store combobox in der grid-editor

Ich weiß, das wurde irgendwo gefragt, wieder und wieder, aber ich kann nicht finden, eine solide Antwort als standard für diese Art von problem.

So viele getan haben, bevor ich einen editor im inneren ein Gitter, das eine combobox verwendet, remote-laden von einer Datenbank. Nehmen wir nun an, es gibt eine Tabelle in der Datenbank mit 50.000 Datensätzen.
Die combobox nur lädt den ersten 15. Wenn ich einen Datensatz auswählen zwischen diesen 15 alles, was gut zeigt. Zum Rendern der displayField statt der valueField verwende ich die folgende Funktion

  renderCombobox : function(value, metaData, record, rowIndex, colIndex, store, view, isNewRow){      
      var me      = this,
          columns = me.columns,
          editor, editorStore, editorIndex, displayField, display, rec;

    for(var i=0,j=columns.length;i<j;i++){          
      if(columns[i].getEditor){
          editor = columns[i].getEditor(record);
          if(editor.xtype === 'combobox'){
              editorStore   = editor.getStore().load();
              editorIndex   = editorStore.findExact(editor.valueField, value);
              displayField = editor.displayField;
          }
      }
    }      
    if(editorIndex != -1){
        rec = editorStore.getAt(editorIndex);
        if(rec && rec.get(displayField)){
            display = rec.get(displayField);
        }               
    }      
    return display;        
}

Das problem ist das folgende Szenario.

Wenn ich geben Sie vor, ich finde einen Datensatz, der nicht zwischen diesen 15 Datensätze. Zum Beispiel die Rekord 42,300. Ich wählen Sie es und für den moment ist alles OK.
Nun, Wenn ich auf einem anderen Feld in einem anderen editor in der grid (d.h. datefield) der renderer
Funktion für die combobox gibt undefined wie versucht wird, finden Sie den Datensatz mit dem Wert des Datensatzes 42,300, die nicht vorhanden in den speichern. Debugger sagt, dass der Speicher enthält wieder nur die ersten 15 Einträge.

Gibt es eine Konfiguration, die ich vermisse? Der laden muss eine Einschränkung. Ich kann nicht 50.000 Datensätze aus der Datenbank auf einmal.

  • Ich denke ein Ansatz ist die Verwendung this.store.on({beforeload:somefns,load:somefns}). Diese beiden Funktionen verantwortlich sein sollte, zu finden, wird der Letzte Wert der combobox, die kamen aus der Datenbank aus und fügen Sie es in den laden mit store.insert(0,record). Also jedes mal, wenn der erste Datensatz werden die von der remote-Quelle. Ich werde versuchen später heute Abend und kommen zurück, sollte ich eine Lösung haben. Dies kann für jemanden nützlich sein.
InformationsquelleAutor dev | 2014-06-01
Schreibe einen Kommentar