Marco_89 Geschrieben 17. Januar 2011 Geschrieben 17. Januar 2011 Hallo Leute, ich habe ein Problem und zwar habe ich ein GridView in meinem Framework, welches sich ExtJS schimpft. Dort werden diverse Daten in gruppenansicht (Groupingstore) hineingeladen und angezeigt. So nun will ich aber andere aktuellere Daten dort angezeigt bekommen, nur die Frage ist wie aktualisiere, update oder refreshe ich diese Tabelle? Dieses Framework ist sehr umfangreich und kompliziert. Danke im Voraus Zitieren
etreu Geschrieben 17. Januar 2011 Geschrieben 17. Januar 2011 Du sagst der Tabelle via JS, dass sie sich refresh()'en soll. Zuvor hast du dich auf das Event 'beforerefresh' registriert, in dem dem du dann den Store via Ajax aktualisierst. Zitieren
Marco_89 Geschrieben 18. Januar 2011 Autor Geschrieben 18. Januar 2011 Viele Dank erstmal Ja das mit dem Refresh hab ich schon in der API gelesen nur ich weiss nicht wie ich das anwende. ich bin totaler ExtJS Neuling:( Hier ist einmal der DataStore: aktuell_DataStore = new Ext.data.GroupingStore({ groupOnSort: true, //Verbindung zu der database.php herstellen, da diese Datei die Daten anfordert proxy: new Ext.data.HttpProxy({ url:'database.php', method: 'GET', timeout:9000000 }), baseParams:{ip: ip_num, dataToshow: data_show, task: "GETALL"}, autoLoad: true, //Ein Parser, der die gelieferten Daten unterteilt und in Bereiche aufteilt reader: new Ext.data.JsonReader({ root:'results', totalProperty:'total', id: 'id' },[ {name: 'hostname', type:'string', mapping:'hostname'}, {name: 'ipv4_addr', type:'string', mapping:'ipv4_addr'}, {name: 'ipv6', type:'string', mapping:'ipv6'}, {name: 'ondemand', type:'string', mapping:'ondemand'}, {name: 'command', type:'string', mapping:'command'}, {name: 'datetime', type:'string', mapping:'datetime'}, {name: 'profile', type:'string', mapping:'profile'}, {name: 'description', type:'string', mapping:'description'}, {name: 'result', type:'string', mapping:'result'} ]), //Das Feld datetime ist die aktivierte Spalte die angezeigt wird, wenn der Geraetetab offen ist sortInfo: {field: 'datetime', direction: "ASC"}, groupField: 'datetime' }); und hier einmal das Grid: aktuell_ListingEditorGrid = new Ext.grid.GridPanel({ monitorResize:true, id: 'aktuell_ListingEditorGrid', store: aktuell_DataStore, cm: aktuell_ColumnModel, anchor:'100% 90%', viewConfig: {forceFit:true}, plugins: [expander,new Ext.ux.grid.GridFilters({ //Im Menue des Spaltennamens wird ein Filter implementiert filters:[{type: 'string', dataIndex: 'datetime'}, //der nach einem eingegebenen Datum Filter {type: 'string', dataIndex: 'command'}, {type: 'string', dataIndex: 'ondemand'}] })], loadMask:true, listeners:{ render: function(aktuell_ListingEditorGrid){ aktuell_ListingEditorGrid.loadMask.show(); }, delay : 100, single : true }, renderTo: document.body, columnLines: true, view: new Ext.grid.GroupingView({ startCollapsed: true, forceFit: true, groupTextTpl:'{text} ({[values.rs.length]} {[values.rs.length > 1 ? "Items" : "Item"]})' }), Wo muss ich jetzt was machen? o.O Zitieren
etreu Geschrieben 18. Januar 2011 Geschrieben 18. Januar 2011 Schau dir mal das Beispiel unter http://dev.sencha.com/deploy/dev/examples/grid/binding-with-classes.js an. Vielleicht reicht dir ja bereits der Aufruf: Ext.StoreMgr.get('gridBookStore').load(); Wobei, du noch die storeId setzen und anpassen must. Oder du probierst es mit: aktuell_DataStore.load(); Du kannst das ganze periodisch in einem Interval machen oder über ein Element auslösen. Vielleicht must du auch bei wiederholten Aufrufen die reload-Methode des Stores benutzen (siehe http://dev.sencha.com/deploy/dev/docs/output/Ext.data.Store.html). Zitieren
Marco_89 Geschrieben 18. Januar 2011 Autor Geschrieben 18. Januar 2011 ok gut ich hab das jetzt eingefügt an der stelle wo ich es haben möchte. jetzt hab ich nur noch ein kleines problem und zwar wie bekomme ich jetzt meine ermittelten daten aus der datenbank in die tabelle? übrigens reload habe ich gestern ebenfalls versucht nur bei mir hat es nicht geklappt und heute wo du es sagst geht es :S. hm naja aufjedenfall muss ich doch die daten aus der DB als paramter an die load bzw reload funktion übergeben oder? Zitieren
etreu Geschrieben 18. Januar 2011 Geschrieben 18. Januar 2011 hm naja aufjedenfall muss ich doch die daten aus der DB als paramter an die load bzw reload funktion übergeben oder? Das Reload sollte deinen Store aktualisiert haben. Jetzt sollte da Update deiner UI via refresh() den Rest erledigen. Zitieren
Marco_89 Geschrieben 18. Januar 2011 Autor Geschrieben 18. Januar 2011 kannst du mir das ein meinem code zeigen wo ich das platzieren muss bzw wie die anweisung lautet. refresh macht sinn aber ich weiß nicht mit was ich das in verbindung bringen soll. muss ich das so machen: Ext.StoreMgr.get('aktuell_DataStore').refresh(); oder wie? Zitieren
etreu Geschrieben 18. Januar 2011 Geschrieben 18. Januar 2011 aktuell_ListingEditorGrid.refresh() Zitieren
Marco_89 Geschrieben 18. Januar 2011 Autor Geschrieben 18. Januar 2011 der sagt das das keine funktion ist. ich muss vor dem aktuell_listingeditorgrid noch was schrieben. i-wie komponenten oder so dann geht das glaub cih Zitieren
etreu Geschrieben 18. Januar 2011 Geschrieben 18. Januar 2011 aktuell_ListingEditorGrid.getView().refresh() Zitieren
Marco_89 Geschrieben 18. Januar 2011 Autor Geschrieben 18. Januar 2011 das mit getview() bringt nichts weil er das aktuell_listingeditorgrid allgemein nicht kennt. somit kann er auch nicht drauf zugreifen. er refresht die tabelle also lädt irgendwas aber übernimmt keine werte zwei infos noch: 1. ich will das datastore und das grid aus einer anderen datei refreshen 2. die daten aus der DB liegen mir als json codierte daten vor und die ermittelten daten muss ich doch i-wie an das datastore wieder übergeben Zitieren
etreu Geschrieben 18. Januar 2011 Geschrieben 18. Januar 2011 Mach dir mal Gedanken zu den Themen Gültigkeitsbereiche, Objektorientierung und Referenzen. Zitieren
Marco_89 Geschrieben 18. Januar 2011 Autor Geschrieben 18. Januar 2011 das ist mir schon klar aber es muss trotzdem möglich sein das store aus einer anderen datein zu aktualisieren. ich meine im grunde genommen lädt er die sachen ja neu nur wenn ich die ermittelten daten nirgends übergebe wie soll er sie dann anzeigen?^^ Zitieren
etreu Geschrieben 18. Januar 2011 Geschrieben 18. Januar 2011 Du erzeugst ein Store-Objekt. Dieses kann dazu genutzt werden die Daten zu aktualisieren (neu einlesen). Die View hält eine Referenz auf dieses Objekt und wird gerendert. Ändert sich das Model (der Store), muss die View neu gerendert werden. Wird keine Referenz gehalten, sondern eine Kopie, erfolgt vor dem erneuten Rendern eine Zuweisung des neuen Stores. Du kannst dein Panel als globale Variable anlegen, entweder direkt unter document oder an ein beliebiges Objekt hängen. Zitieren
Marco_89 Geschrieben 19. Januar 2011 Autor Geschrieben 19. Januar 2011 kannst du mir das anhand meines oben geposteten quellcodes zeigen wo ich das objekt erzeugen muss. ich hab kaum erfahrung mir dem framework deswegen frage ich soviel nach. ich hab ein großes problem damit zu verstehen wie ich die neu ermittelten daten jetzt an den datastore übergebe, weil wenn ich den datastore nur neu lade also mit .load() dann hat er ja immernoch nciht die ermittelten daten. die liegen ja immernoch in einer variable bei mir. ich übergebe einen wert an eine datenbank php worauf mir dann werte aus der datenbank geliefert werden. die gelieferten werte sind in der variable content enthalten und jetzt will ich sie wie schon erwähnt in das grid bekommen, wo allerdings schon werte enthalten sind. if (window.XMLHttpRequest) { xmlhttp=new XMLHttpRequest(); xmlhttp.open("POST","database.php",true); xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); xmlhttp.send('wert='+searchvalue+'&dataToshow='+data_show+'&task=SEARCHING'); xmlhttp.onreadystatechange = interpretRequest; var content = xmlhttp.responseText; Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.