Sencha Touch Load Mask

时间:2013-11-21 11:20:12

标签: extjs sencha-touch sencha-touch-2

我有列表并下拉以刷新插件。当刷新功能触发时,我想显示加载掩码。但它没有显示在那里。当我评论store.removeAll();行时,我可以看到loadmask工作。我不知道store.removeAll()的问题是什么。请帮我解决这个问题。提前致谢

                {
                    xclass: 'Ext.ux.PullRefreshFn',
                    pullRefreshText: 'Pull down for refresh Contacts!',
                    refreshFn: function() {
                        console.log('pull refresh working');
                        Ext.Viewport.setMasked({
                            xtype: 'loadmask',
                            message: 'Please Wait...'
                        });
                        var store = Ext.getStore('Contactsstore');
                        store.removeAll();

                        var url = apiurl+'Contact.ashx?switch=GetContactList&api_id=4&getDataAgain=true';
                        store.getProxy().setUrl(url);
                        store.loadPage(1,{
                            callback: function (records, operation, success, response) {
                                if (success==1) {

                                    Ext.Viewport.setMasked(false);

                                } else {
                                    Ext.Viewport.setMasked(false);


                                }
                            }
                        });
                        Ext.getCmp('searchcontact').reset();
                    }
                }

这是我的商店配置

Ext.define('WinReo.store.Contactsstore', {
    extend: 'Ext.data.TreeStore',
    requires: [
        'WinReo.model.Contactsmodel'
    ],

    config: {
        storeId: 'Contactsstore',
        defaultRootProperty: 'items',
        model: 'WinReo.model.Contactsmodel',
        autoLoad: false,
        pageSize: 20,
        proxy: {

            type: 'ajax',
            method:'post',
            id: 'Contactsstoreproxy',
            url:apiurl+'Contact.ashx?switch=GetContactList&api_id=4&getDataAgain=false',
            reader: {
                type: 'json',
                rootProperty: 'items'
            }
        },
        listeners: {
            load: function(store, records, successful, operation, eOpts) {
                callback:{
                    succes:
                        if(store.getCount()!=0){
                            var RecordCount=store.getAt(0).get('RecordCount');
                            //console.log('RecordCount',RecordCount);
                            store.setTotalCount(RecordCount);
                            var storectscount = store.getTotalCount();
                            //Ext.Msg.alert('Store Total count',storectscount, Ext.emptyFn);
                        }

                }


            }

        }
    } 
    }

});

1 个答案:

答案 0 :(得分:1)

在浏览器有机会渲染掩码之前,不会渲染加载掩码,直到您的Javascript代码完成后才会发生。我怀疑由于某种原因,removeAll调用没有快速完成(或根本没有),或者clear上的事件监听器没有像它需要的那样完成。检查商店的syncRemovedRecords: trueautoSync: true配置。您还可以尝试使用removeAll(true)来阻止clear事件发生。

<强>更新

查看商店定义,我至少可以看到一个问题:您的load侦听器看起来不正确。您正在函数内部定义callback字段(不会编译),并且'successces'拼写错误。这是你的想法吗?

       load: function(store, records, successful, operation, eOpts) {
            if(successful === true && store.getCount()!=0){
                    var RecordCount=store.getAt(0).get('RecordCount');
                    store.setTotalCount(RecordCount);
                }
            }
        }