6 Stimmen

Sencha-touch : Liste aktualisieren : speichern

Ich habe eine Liste von Nachrichten in einer Ext.List innerhalb eines Panels

prj.views.NewsList = Ext.extend(Ext.Panel, {
    layout: 'card',
    initComponent: function() {     
        this.list = new Ext.List({            
            itemTpl: '......',
            loadingText: false,
            store: new Ext.data.Store({
                model: 'News',
                autoLoad: true,
                proxy: {
                    type: 'ajax',
                    url: '.....',                
                    reader: {
                        type: 'json',
                        //root: ''
                    }
                },
                listeners: {
                    load: { fn: this.initializeData, scope: this }
                }
            })
        });

        this.list.on('render', function(){
            this.list.store.load();
            this.list.el.mask('<span class="top"></span><span class="right"></span><span class="bottom"></span><span class="left"></span>', 'x-spinner', false);
        }, this);

        this.listpanel = new Ext.Panel({
            items: this.list,
            layout: 'fit',            
            listeners: {
                activate: { fn: function(){
                    this.list.getSelectionModel().deselectAll();
                    Ext.repaint();
                }, scope: this }
            }
        })

        this.items = this.listpanel;    
        prj.views.NewsList.superclass.initComponent.call(this);
    },
});

Ext.reg('newsList', prj.views.NewsList);

In einer Symbolleiste, die in einem angedockten Element eingerichtet ist, habe ich ein Symbol zum Aktualisieren der Liste.

items: [
    {
        iconCls: 'refresh',                             
        handler: function() {                                   
        prj.view.NewsList.list.store.read()
        }   
    },
]

aber prj.view.NewsList ist undefiniert! Wie kann ich die Liste dazu bringen, eine Aktualisierung des Shops durchzuführen?

14voto

BasicCoder Punkte 1651

Rufen Sie diese Zeile auf Ihrer Aktualisierungsschaltfläche auf

Ext.StoreMgr.get('newsStore').load()

Die Liste wird automatisch aktualisiert, wenn Sie die load()-Methode für den Store aufrufen. Der Speicher ist mit der Liste verknüpft.

Beispiel:

items: [
    {
        iconCls: 'refresh',     
        handler: function(event, btn) {
            Ext.StoreMgr.get('newsStore').load();
        }           
    },
]

5voto

thesummersign Punkte 1568

Auch ich stand vor einem ähnlichen Problem. Ich poste meine Antwort in der Hoffnung, dass dies jemandem hilft.

Ich habe eine Suchleiste, um Daten zu suchen. (Meine Suche findet auf dem Server statt und die Ergebnisse werden als Antwort auf meine GET-Anfrage an mich zurückgeschickt.

Im Grunde musste ich nur die URL für meinen Shop ändern

WAS ICH ALLES AUSPROBIERT HABE:

  1. myList.refresh(),
  2. myStore.load();
  3. Löschen des Speichers und anschließendes Laden des Speichers
  4. Entfernen der Liste und erneutes Hinzufügen und Erzwingen einer neuen Darstellung (mit doLayout())

Nichts funktionierte...

das Hinzufügen einer EINZIGEN Zeile hat mein Problem gelöst

    function handleSearch(strSearchText)
    {   
    //myStore.loadData([],false); /tried to clear the store and reloading it
    if(strSearchText !='')
    {
        searchString = '?search='+strSearchText;
        searchURL = searchURLBasic+ searchString;
    }else{
        searchURL = searchURLBasic;
    }
    console.log('search URL: ' + searchURL);
    myStore.proxy.url =searchURL;           // this was one magical line of code that saved my life
    myStore.load();
}

DANKE SO für die Unterstützung.

1voto

DvideBy0 Punkte 688

Ich tue dies, wenn ich den Laden wechsle, und es funktioniert wie ein Champion

var yourbutton = new Ext.Panel({
    listeners: {
        afterrender: function(c){
            c.el.on('click', function(){
                YourList.update();
                YourList.bindStore(newStore);
            });
        }
    }
});

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X