Ext.plugins.ListPagingPlugin“pullrefresh”sencha touch

时间:2011-11-17 20:08:31

标签: sencha-touch extjs

我正在尝试为以下内容添加一个侦听器,但它不会触发

plugins: [{
                ptype: 'pullrefresh',
                autoPaging: true,
                listeners: {
                     'released': function(plugin,list){
                       // call the plugins processComplete method to hide the 'loading' indicator
                      /* your_store.on('load', plugin.processComplete,     plugin, {single:true});
                       // do whatever needs to happen for reload
                       your_store.load();*/
                       alert('test');
                     }
                }
            }],

我想要做的是有人在刷新事件时触发列表我们获取用户的纬度和经度并将值加载到商店中。我的问题是商店beforeload:事件没有正确的事件泡沫,因此它可以在它可以获得用户地理位置之前存储json调用。

My Store{

listeners: {
        beforeload: function(){

            console.log( 'me1' );
            //call this to write to location services on device
            if (navigator.geolocation) {
                navigator.geolocation.getCurrentPosition(function(position) {
                    console.log( 'me2' );
                    Rad.stores.games.getProxy().extraParams.lat  = position.coords.latitude;
                    Rad.stores.games.getProxy().extraParams.long  = position.coords.longitude;  
                }); 
            }
            console.log( 'me3' );
        }
    }
}

如果你看一下控制台,它会显示me1,me3,me2 ....我想让它显示me1,me2,me3。

我真的看了所有的论坛,文档,但我只是需要一些方向来设置监听器和事件冒泡。谢谢你。

2 个答案:

答案 0 :(得分:5)

以下是您的操作方法:refreshFn

        // pull refresh and listupdate plugins
        plugins: [
            {
                ptype: 'pullrefresh',
                refreshFn: function(callback, plugin) {
                    console.log( 'me1' );
                    if (navigator.geolocation) {
                        navigator.geolocation.getCurrentPosition(function(position) {
                            console.log( 'me2' );
                            Rad.stores.games.getProxy().extraParams.lat  = position.coords.latitude;
                            Rad.stores.games.getProxy().extraParams.long  = position.coords.longitude;  
                            var store = plugin.list.getStore();
                            store.load(function(records, operation, success) {
                                callback.call(plugin);
                                console.log( 'me3' );
                            });
                        }); 
                    }
                }
            },
            {
                ptype: 'listpaging',
                autoPaging: false,  
            }
        ],

这是商店:

  Rad.stores.games = new Ext.data.Store({
id: 'games',
model: 'games',
autoLoad:false,
    clearOnPageLoad: false, 
proxy: {
   type: 'ajax',
   url : 'ajax/lc.php',
   reader: {
        type: 'json',
        root: 'results'
   }
},
extraParams:{
    format:'json'
}

});

我发现sencha touch没有分配工作示例所以我会在发现问题时不断发布自己的问题答案。

答案 1 :(得分:0)

我已经更新了一下,以便使用Sencha 2.1和我的需求

我需要在pullRefresh被触发时设置一些extraParams(在我的情况下,显示相同Feed的不同过滤器)。上面的例子有所帮助,但我不得不做一些调整 - 这对我来说是在Sencha Touch 2.1

我的商店被称为“问题”,我需要从用户切换订阅源时设置的变量(MyApp.util.Config.currentFeed)设置“类型”参数。希望这有助于某人

plugins: [
{
  xclass: 'Ext.plugin.PullRefresh',
  pullRefreshText: 'Pull to refresh...',
  refreshFn: function() {
    console.log( 'firing pullrefresh event' );
    var store = Ext.getStore('Questions');
    store.getProxy().setExtraParam('type',MyApp.util.Config.currentFeed);
    Ext.Viewport.setMasked({
      xtype: 'loadmask'
    });
    store.load(function(records, operation, success) {
      console.log( 'finished pullrefresh event' );
      Ext.Viewport.setMasked(false);
    });
  }
}]