Sencha-touch: обновить список: сохранить

У меня есть список новостей в Ext.List внутри панели

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);

В настройке панели инструментов в док-элементе у меня есть значок для обновления списка.

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

но prj.view.NewsList возвращает неопределенное значение! Как я могу получить список для обновления магазина?


person BasicCoder    schedule 24.05.2011    source источник
comment
Я получаю хранилище с помощью Ext.StoreMgr.get('newsStore').load(). Но как мне обновить панель со списком?   -  person BasicCoder    schedule 24.05.2011


Ответы (3)


Даже я столкнулся с подобной проблемой. Я отправляю свой ответ, надеюсь, это кому-то поможет.

У меня есть панель поиска для поиска данных. (мой поиск происходит на сервере, и результаты отправляются мне обратно в ответ на мой запрос GET.

По сути, мне просто нужно было изменить URL-адрес моего магазина.

ЧТО Я ПРОБОВАЛ:

  1. мойСписок.обновить(),
  2. мой магазин.загрузить();
  3. очистка магазина, а затем его загрузка
  4. удаление списка и добавление его снова и принудительное повторное отображение (используя doLayout())

Ничего не получилось...

просто добавление ОДНОЙ строки исправило мою проблему

    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();
}

СПАСИБО за поддержку.

person thesummersign    schedule 14.12.2011

Вызовите эту строку на кнопке обновления

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

Список автоматически обновляется, когда вы вызываете метод load() в хранилище. Магазин привязан к списку.

Пример:

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

Я делаю это при смене магазина, и это работает как чемпион

var yourbutton = new Ext.Panel({
    listeners: {
        afterrender: function(c){
            c.el.on('click', function(){
                YourList.update();
                YourList.bindStore(newStore);
            });
        }
    }
});
person DvideBy0    schedule 09.07.2011
comment
на Sencha Touch 2.x bindStore не существует. Следует использовать setStore(), но у меня тоже есть проблемы с этим. - person AnthonyVO; 24.04.2014