2017-08-24 6 views
-1

Ich habe ein Formular, und ich muss ein Raster mit den Feldern Werte füllen.Füllen Sie ein Gitter mit Werten aus dem Formular ?? EXTJS

In diesem Moment werden die Combobox-Werte durch eine SQL-Abfrage in einer PHP-Datei erhalten, die von JSON Store aufgerufen werden, um das Formular auszufüllen.

Die gleiche Weise, die ich benutze, um die Rasterdaten aber mit anderen Speichern nur für Raster zu füllen.

Eigentlich fülle ich das Raster durch JSON-Methode.

Das ist mein JSON Store, der einige Werte aufruft, die im Grid enthalten sind.

var store_grid_CC = new Ext.data.JsonStore({ 
//successProperty: 'success', 
url: 'json/distribucion.php?opcion=grid', 
autoLoad: true, 
fields : ['center_name', 'subcenter_id','subcenter_name', 'porc_distribucion'], 
root : 'grid', 
}); 

und in den Combobox Zuhörern i diesen Aufruf benutzen, lädt das Raster (sollte, weil das Gitter gefüllt werden, wenn ich einen Wert in der Combo wählen)

store_grid_CC.load({ 
params:{ subcenter_id: subcenter_id, 
opcion:'grid'} 
}); 

Das Shop distribucion.php gehen und senden Sie die subcenter_id aus einer Combobox erhalten, und dann die PHP-Datei durch SQL-Abfrage die center_name und subcentername, die in den ersten beiden Spalten des Rasters gefüllt sind (sind 4).

Aber die letzten 2 Spalten sollten mit einigen Daten aus den Textfeldern im Formular gefüllt werden.

Dann ist mein Problem, dass ich 2-Wege-Methode haben, um Daten für dieses Raster zu erhalten, (durch JSON Weg und Wert Form Weg).

Eine Lösung, die ich denke, ist es, alle Daten aus den Formularfeldern erhalten, einschließlich der Combobox-Werte, aber nicht beschränkt auf SQL Aufruf und eine JSON-Antwort zu warten, sonst bekommen die RawValue von de Combo Feld (Endwert, ohne Verwendung a subcenter_id).

Beispiel: Der Combobox Wert wird mit dem genannten:

form.getForm().findField('combobox').RawValue() that return a name. 

und das Textfeld mit:

form.getForm().findField('textfield').getValue() that return a number. 

GRID:

 column1   column2  column3    column4 

row1 comboRawValue comboRawValue texfieldgetValue texfieldgetValue


row2 "Auto" "LKW" 20 100


(nur Beispiel).

Ich muss diese Daten in den Grid Store und wenn ich eine Taste wie (Zeile hinzufügen) drücken, sollten diese Werte in das Raster in einer neuen Zeile eingefügt werden.

Wie kann ich das tun? Wie kann ich den Grid Store mit Daten aus dem Formular füllen ?.

Ich versuche mit SimpleStores, JSONStores, aber ich weiß nicht, wie die Formularwerte zu speichern, um von Raster danach readded werden. Ich war nicht erfolgreich.

Vielen Dank!

Antwort

1

Schritt 1: Sie möchten die gleichen Namen für Ihre Formularfelder verwenden, die Sie für Ihre Rasterspalten und Speicherfelder verwenden.

z. Formularfelder:

items: [{ 
    xtype: 'textfield', 
    fieldLabel: 'Test string', 
    name: 'Test1' 
},{ 
    xtype: 'checkbox', 
    fieldLabel: 'Test bool', 
    name: 'Test2' 
},{ 
    xtype: 'numberfield', 
    fieldLabel: 'Test number', 
    name: 'Test3' 
}] 

Z.B. Modellfelder:

Ext.define('MyModel',{ 
    extend: 'Ext.data.Model', 
    fields:[{ 
     name: 'Test1', 
     type: 'string' 
    },{ 
     name: 'Test2', 
     type: 'bool' 
    },{ 
     name: 'Test3', 
     type: 'int' 
    }] 
}); 

z. Gitter Spalten:

columns:[{ 
    xtype: 'gridcolumn', 
    text: 'Test string', 
    dataIndex: 'Test1' 
},{ 
    xtype:'checkcolumn', 
    text: 'Test bool', 
    dataIndex: 'Test2' 
},{ 
    xtype: 'numbercolumn', 
    text: 'Test number', 
    dataIndex: 'Test3' 
}] 

Schritt 2: Datensatz in die Form binden.

Wenn Sie einen neuen Eintrag erstellen, ein neues Modell Instanz erstellen und in Form binden:

form.setRecord(Ext.create('MyModel')) 

Beim Speichern, aktualisieren Sie die Aufzeichnung und fügen Sie ihn in den Laden, wenn es nicht schon ist.

form.updateRecord(); 
if(store.indexOf(form.getRecord()==-1) store.add(form.getRecord()); 

Wenn Sie einen bestehenden Eintrag bearbeiten, den Datensatz in den Laden binden, zum Beispiel des fünften Rekord:

form.setRecord(store.getAt(4)); 
+0

Dank Alexander, arbeitet Das ist mit EXTJS 4? Ich habe diese Frage gestellt, weil ich nicht mit Model-Dateien (wie extjs6) arbeite, sondern nur mit Simple und JSON Stores arbeite und kürzlich EXTJS lerne. – Camilo

+0

Nun, in ExtJS 4 werden sogar Modelle benötigt, während in ExtJS6 die meisten Geschäfte ohne Modell arbeiten können. – Alexander

Verwandte Themen