2016-06-06 14 views
1

In meiner App gibt es zwei Drag & Drop-Gitter.Was ist der beste Weg, um eine Liste aus den Zeilen eines Rasters zu erstellen

Um eine Liste zu erstellen, ziehen Sie Zeilen vom ersten in das zweite Raster.

Wie kann ich diese Liste von Zeilen (zweites Raster) am besten so senden, dass der Server in einem anderen Raster angezeigt wird?

Ich habe versucht, zu synchronisieren und setDirty (true), aber "Ext.data.Model # setDirty" ist veraltet.

var grid = this.lookupReference('gridRef'); 
    var store = grid.getStore(); 
    store.each(function(record){ 
     record.setDirty(true); 
    }); 

    store.sync(); 

Ich habe versucht, ohne Erfolg:

var grid = this.lookupReference('gridRef'); 
    var store = grid.getStore(); 
    grid.getSelectionModel().selectAll(); 
    var selection = grid.getSelectionModel().getSelection(); 
    var values = []; 

    for(var i=0; i<selection.length; i++) { 
     values.push(selection[i].get('order')); 
     values.push(selection[i].get('item')); 
    } 

    var model = Ext.create('app.myModel', values); 
    console.log(model) //show just one item 
    ???? 

EDITED:

var grid = this.lookupReference('gridRef'); 
    var store = grid.getStore();   

    var records = store.getRange(); 

    var create = 'create'; //PHP CRUD » case create 

    Ext.Ajax.request({ 
     url: 'php/crudActionList.php?create', 
     method: 'POST', 
     params : create, 
     jsonData: records, 
     // jsonData: Ext.encode(records), 
     // jsonData: Ext.JSON.encode(records), 
     success: function(conn, response, options, eOpts) { 
       console.log('Success!'); 
     }, 
     failure: function(conn, response, options, eOpts) { 
      console.log('failure') 
     } 
    }); 

Antwort

1

die gesamte Palette von Datensatz aus dem Laden auf den Server in einer einzigen Ext.Ajax.request, könnten Sie versuchen zu senden:

Ext.Ajax.request({ 
    url:'testURL', 
    jsonData:store.getRange() 
}); 

Oder Sie können ein spezielles Feld in Ihrem Datensatz haben, das angibt, ob der Datensatz in der Liste enthalten ist oder nicht. Setzen Sie das nicht persistente boolesche Feld auf defaultValue false und onDrop setzen Sie es auf True. Und voilá, die Platte sollte schmutzig sein.

+0

Danke Alexander. getRange() funktioniert gut. Allerdings bekomme ich den folgenden Fehler: Uncaught RangeError: Maximale Call-Stack-Größe überschritten. Ich habe meine Frage mit meinem Code bearbeitet. – josei

+0

Sorry, vergessen Sie, dass Sie die Daten aus den Datensätzen extrahieren müssen. Ein Datensatz enthält einen Link zum Speicher, der eine Verknüpfung zum Datensatz enthält. Wenn dieser als einfacher Baum serialisiert wird, ist er endlos. Versuchen Sie 'store.getRange(). Map (function (record) {return record.getData()})'. – Alexander

+0

Danke nochmal Alexander. – josei