JSon dataStore kann nicht in ExtJS (Sencha Touch) -Diagramm übernommen werden: Zeigt den Fehler "Eigenschaft 'Länge' von undefiniert kann nicht gelesen werden" an.
BEARBEITET Ich verwende ein Sencha-Touch-Chart-Beispiel für Säulendiagramme. Der Code ist wie folgt
<code>new Ext.chart.Panel({ fullscreen: true, title: 'Column Chart', dockedItems: [{ xtype: 'button', iconCls: 'help', iconMask: true, ui: 'plain', handler: onHelpTap }, { xtype: 'button', iconCls: 'shuffle', iconMask: true, ui: 'plain', handler: onRefreshTap }], items: { cls: 'column1', animate: { easing: 'bounceOut', duration: 750 }, store: window.store1, shadow: false, gradients: [{ 'id': 'v-1', 'angle': 0, stops: { 0: { color: 'rgb(212, 40, 40)' }, 100: { color: 'rgb(117, 14, 14)' } } }, { 'id': 'v-2', 'angle': 0, stops: { 0: { color: 'rgb(180, 216, 42)' }, 100: { color: 'rgb(94, 114, 13)' } } }, { 'id': 'v-3', 'angle': 0, stops: { 0: { color: 'rgb(43, 221, 115)' }, 100: { color: 'rgb(14, 117, 56)' } } }, { 'id': 'v-4', 'angle': 0, stops: { 0: { color: 'rgb(45, 117, 226)' }, 100: { color: 'rgb(14, 56, 117)' } } }, { 'id': 'v-5', 'angle': 0, stops: { 0: { color: 'rgb(187, 45, 222)' }, 100: { color: 'rgb(85, 10, 103)' } } }], axes: [{ type: 'Numeric', position: 'left', fields: ['wins'], minimum: 0, maximum: 10, label: { renderer: function (v) { return v.toFixed(0); } }, title: 'Wins' }, { type: 'Category', position: 'bottom', fields: ['School'], title: 'School' }], series: [{ type: 'column', axis: 'left', highlight: true, renderer: function (sprite, storeItem, barAttr, i, store) { barAttr.fill = colors[i % colors.length]; return barAttr; }, label: { field: 'wins' }, xField: 'School', yField: 'wins' }], interactions: [{ type: 'panzoom', axes: ['bottom'] }] } }); } </code>
BEARBEITET: Ich kann jetzt die JSON-Daten laden, wenn ich dies im Debugger überprüfe, aber mein Diagramm wird immer noch nicht angezeigt. Hier ist mein aktualisierter Code
<code>Ext.regModel('Details', { fields: [{ name: 'School' }, { name: 'wins'}] }); // create the Data Store window.store1 = new Ext.data.Store({ model: 'Details', proxy: { type: 'scripttag', url: 'http://localhost:2650/AjaxWCFService.svc/GetDataset', reader: { root: 'data', type: 'json' } }, autoLoad: true }); </code>
schätzen, wenn jemand mich wissen lassen könnte, wenn ich etwas falsch mache.
ALTER POST: Ich verwende eine json-Ausgabe, um an mein Sencha-Säulendiagramm zu binden. Mein Code ist wie folgt -
<code>Ext.regModel('details', { idProperty: 'name', fields: ['School', 'wins'] }); // create the Data Store window.store1 = new Ext.data.Store({ model: 'details', autoLoad: true, proxy: { type: 'ajax', method: 'POST', url: 'http://localhost:2650/AjaxWCFService.svc/GetDataset', reader: { type: 'json', root: 'data' } }, listeners: { load: function (obj, records) { Ext.each(records, function (rec) { console.log(rec.get('name')); }); } } }); </code>
Dies sind die JSON-Daten, die von der URL zurückgegeben werden
<code>{ data: [ {School:'Dukes',wins:'3'}, {School:'Emmaus',wins:'10'}, {School:'Maryland',wins:'5'}, {School:'Virginia',wins:'2'} ] } </code>
Das Diagramm wird jedoch nicht angezeigt. Stattdessen wird ein Javascript-Fehler "Fehler beim Auffinden des Typs: Eigenschaftslänge von undefined kann nicht gelesen werden" in der Datei "sencha-touch.js" angezeigt.
Wenn ich die Daten von der JSON-Ausgabe direkt hart codiere, funktioniert es
<code>window.store1 = new Ext.data.JsonStore({ root: 'data', fields: ['School', 'wins'], autoLoad: true, data: [ {School:'Dukes',wins:'3'}, {School:'Emmaus',wins:'10'}, {School:'Maryland',wins:'5'}, {School:'Virginia',wins:'2'} ] }); </code>
Auch wenn ich den jsonStore aus dem ExtDesigner lade, funktioniert er einwandfrei. Wenn ich denselben Code in meine Datei "Secha charts index.js" kopiere, funktioniert er nicht.
Kann mir jemand bitte mitteilen, was ich in meinem Code falsch mache?