2013-07-23 9 views
8

Ich muss erste Gitter Panel auf Registerkarte laden und laden Sie dann Daten in Speicher mit loadData() -Funktion, die gut funktioniert, aber jetzt muss ich unendlich Raster Scrollen integrieren damit. ist das eine Möglichkeit, unbegrenztes Scrollen nach dem Laden von loadData in den Speicher zu integrieren ..? Ich verwende ExtJS 4.1. Bitte helfen Sie mir .... Hier zeige ich mein aktuelles Skript im Controller und im Grip View Panel, in dem ich es ausprobiert habe, aber nicht funktioniert.ExtJS 4.1 Infinite Grid Scrolling funktioniert nicht mit dynamischem Speicher mit loadData

Controller Skript wie folgt:

var c = this.getApplication().getController('Main'), 
         data = c.generateReportGridConfiguration(response,true), 
         tabParams = { 
          title: 'Generated Report', 
          closable: true, 
          iconCls: 'view', 
          widget: 'generatedReportGrid', 
          layout: 'fit', 
          gridConfig: data 
         }, 
         generatedReportGrid = this.addTab(tabParams); 

generatedReportGrid.getStore().loadData(data.data); 

Auf Above Skript, sobald ich Ajax-Aufruf Antwort erhalten, das Hinzufügen Gitterplatte mit tabParams und übergebenen Daten mit gridConfig param, die Felder und Spalten für Raster gesetzt werden und dann zuletzt Anweisung Versorgungsnetz Daten an das Netz. Ich habe durch folgendes Referenzbeispiel Gitterplatte Einstellungen ausprobiert: http://dev.sencha.com/deploy/ext-4.0.1/examples/grid/infinite-scroll.html

auf dem oberen Seite, inklusive script =>http://dev.sencha.com/deploy/ext-4.0.1/examples/grid/infinite-scroll.js

My Grid-Panel-Skript wie folgt:

Ext.define('ReportsBuilder.view.GeneratedReportGrid', { 
    extend: 'Ext.grid.Panel', 
    alias: 'widget.generatedReportGrid', 
    requires: [ 
     'ReportsBuilder.view.GenerateViewToolbar', 
     'Ext.grid.*', 
     'Ext.data.*', 
     'Ext.util.*', 
     'Ext.grid.PagingScroller', 
     'Ext.grid.RowNumberer',  
    ], 
    initComponent: function() { 
     Ext.define('Report', {extend: 'Ext.data.Model', fields: this.gridConfig.fields, idProperty: 'rowid'}); 

     var myStore = Ext.create('Ext.data.Store', {model: 'Report', groupField: 'name', 

      // allow the grid to interact with the paging scroller by buffering 
       buffered: true, 
       pageSize: 100, 
       autoSync: true, 
       extraParams: { total: 50000 }, 
       purgePageCount: 0, 
       proxy: { 
        type: 'ajax', 
        data: {}, 
        extraParams: { 
         total: 50000 
        }, 
        reader: { 
         root: 'data', 
         totalProperty: 'totalCount' 
        }, 
       // sends single sort as multi parameter 
       simpleSortMode: true 
       } 
     }); 
     Ext.apply(this, { 
       dockedItems: [ 
        {xtype: 'generateviewToolbar'} 
       ], 
       store: myStore, 
       width:700, 
       height:500, 
       scroll: 'vertical', 
       loadMask: true, 
       verticalScroller:'paginggridscroller', 
       invalidateScrollerOnRefresh: false, 
       viewConfig: { 
        trackOver: false, 
        emptyText: [ 
         '<div class="empty-workspace-bg">', 
         '<div class="empty-workspace-vertical-block-message">There are no results for provided conditions</div>', 
         '<div class="empty-workspace-vertical-block-message-helper"></div>', 
         '</div>' 
        ].join('') 
       }, 
       columns: this.gridConfig.columns, 
       features: [ 
        {ftype: 'groupingsummary', groupHeaderTpl: '{name} ({rows.length} Record{[values.rows.length > 1 ? "s" : ""]})', enableGroupingMenu: false} 
       ], 
       renderTo: Ext.getBody() 
     }); 
    // trigger the data store load 
    myStore.guaranteeRange(0, 99); 
    this.callParent(arguments); 
    } 
}); 

ich auch Anfang behandelt habe und limit von der serverseitigen Abfrage, aber es wird keine ajax Anfrage auf scroll nur sofort abgefeuert, da pageSize Eigenschaft im Grid 100 und GarantieRange Funktion Anrufparameter sind 0,99 wenn ich 0,299 erhöht dann wird es drei Ajax Anruf auf einmal ausgelöst werden (0,100), (100,200) und (2 00,300), aber zeigt Daten im Grid nur für den ersten Ajax-Aufruf und nicht für das vertikale Scrollen.

Da bin ich neue Lerner auf ExtJs, also bitte helfen Sie mir ... Vielen Dank..im fortgeschrittenen.

+3

Aus meiner Erfahrung Scrolling gepuffert (unter anderem;)) in 4.0.0, 4.0.2a, 4.0.7 und 4.1 wurden alle schlecht umgesetzt und haben viele Fehler. Bis 4.0.7 hatte eine Klasse, die zum unendlichen Scrollen benötigt wurde, überhaupt keine Klassendokumentation. Dies kann helfen: http://www.sencha.com/forum/showthread.php?241424-4.1.1-buffered-stores-aren-t-buffered-when-loadData-is-used. Ext hatte 4 Chancen, richtig scrollen zu können, und das taten sie nicht. Also haben wir unsere eigene geschrieben, die flexibler ist und mit Ansichten, unseren benutzerdefinierten Komponenten sowie Rastern arbeitet. – pllee

+0

Verwenden Sie Filter? – MacGyver

+0

Haben Sie das jemals gelöst? es wäre gut, es so fertig zu machen, wie es schon lange offen ist – Scriptable

Antwort

0

Sie können store.loadData nicht mit einer remote/gepufferten Speicher- und Rasterimplementierung aufrufen und erwarten, dass das Raster diese neuen Daten widerspiegelt.

Stattdessen müssen Sie store.load anrufen.

Beispiel 1, gepufferte Speicher unter Verwendung store.load

Dieses Beispiel zeigt das Ereignis store.on("load") Brennen.

http://codepen.io/anon/pen/XJeNQe?editors=001

;(function(Ext) { 
    Ext.onReady(function() { 
    console.log("Ext.onReady") 

    var store = Ext.create("Ext.data.Store", { 
     fields: ["id", "name"] 
     ,buffered: true 
     ,pageSize: 100 
     ,proxy: { 
     type: 'rest' 
     ,url: '/anon/pen/azLBeY.js' 
     reader: { 
      type: 'json' 
     } 
     } 
    }) 
    store.on("load", function(component, records) { 
     console.log("store.load") 
     console.log("records:") 
     console.log(records) 
    }) 

    var grid = new Ext.create("Ext.grid.Panel", { 
     requires: ['Ext.grid.plugin.BufferedRenderer'] 
     ,plugins: { 
     ptype: 'bufferedrenderer' 
     } 
     ,title: "people" 
     ,height: 200 
     ,loadMask: true 
     ,store: store 
     ,columns: [ 
     {text: "id", dataIndex: "id"} 
     ,{text: "name", dataIndex: "name"} 
     ] 
    }) 
    grid.on("afterrender", function(component) { 
     console.log("grid.afterrender") 
    }) 
    grid.render(Ext.getBody())  

    store.load() 
    }) 
})(Ext) 

Beispiel 2, statischer Speicher mit store.loadData

Sie sind von diesem Beispiel sehen können, dass das store.on("load") Ereignis nie ausgelöst.

http://codepen.io/anon/pen/XJeNQe?editors=001

;(function(Ext) { 
    Ext.onReady(function() { 
    console.log("Ext.onReady") 

    var store = Ext.create("Ext.data.Store", { 
     fields: ["id", "name"] 
     ,proxy: { 
     type: 'rest' 
     ,reader: { 
      type: 'json' 
     } 
     } 
    }) 
    store.on("load", function(component, records) { 
     console.log("store.load") 
     console.log("records:") 
     console.log(records) 
    }) 

    var grid = new Ext.create("Ext.grid.Panel", { 
     title: "people" 
     ,height: 200 
     ,store: store 
     ,loadMask: true 
     ,columns: [ 
     {text: "id", dataIndex: "id"} 
     ,{text: "name", dataIndex: "name"} 
     ] 
    }) 
    grid.on("afterrender", function(component) { 
     console.log("grid.afterrender") 
    }) 
    grid.render(Ext.getBody()) 

    var data = [ 
     {'id': 1, 'name': 'Vinnie'} 
     ,{'id': 2, 'name': 'Johna'} 
     ,{'id': 3, 'name': 'Jere'} 
     ,{'id': 4, 'name': 'Magdalena'} 
     ,{'id': 5, 'name': 'Euna'} 
     ,{'id': 6, 'name': 'Mikki'} 
     ,{'id': 7, 'name': 'Obdulia'} 
     ,{'id': 8, 'name': 'Elvina'} 
     ,{'id': 9, 'name': 'Dick'} 
     ,{'id': 10, 'name': 'Beverly'} 
    ] 

    store.loadData(data) 
    }) 
})(Ext)