【问题标题】:Sencha-touch : refresh list : storeSencha-touch:刷新列表:商店
【发布时间】:2011-09-01 00:26:57
【问题描述】:

我在面板内的 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 返回未定义!如何获取列表来刷新商店?

【问题讨论】:

  • 我通过 Ext.StoreMgr.get('newsStore').load() 检索存储。但是如何用列表刷新面板?

标签: sencha-touch


【解决方案1】:

在刷新按钮上调用此行

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

当您在商店中调用 load() 方法时,列表会自动刷新。商店链接到列表。

例子:

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

【讨论】:

    【解决方案2】:

    即使我也遇到过类似的问题。 我正在发布我的答案,希望这对某人有所帮助。

    我有一个搜索栏来搜索数据。 (我的搜索是在服务器上进行的,结果会发回给我以响应我的 GET 请求。

    基本上我只需要更改商店的 URL

    我做了什么:

    1. myList.refresh(),
    2. myStore.load();
    3. 清空商店然后加载它
    4. 删除列表并再次添加并强制重新呈现(使用 doLayout())

    没有任何效果...

    只需添加 SINGLE 行即可解决我的问题

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

    非常感谢您的支持。

    【讨论】:

      【解决方案3】:

      我在改变商店时这样做,它就像一个冠军

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

      【讨论】:

      • 在 Sencha Touch 2.x 上 bindStore 不存在。应该使用 setStore() 但我也遇到了问题。
      猜你喜欢
      • 2014-03-03
      • 1970-01-01
      • 2012-06-17
      • 2012-05-29
      • 1970-01-01
      • 1970-01-01
      • 2011-07-30
      • 1970-01-01
      • 2015-12-28
      相关资源
      最近更新 更多