1

アプリのページングツールバーに問題があります。私のストアには、MySQLデータベーステーブルをJSONデータに変換するPHPスクリプトが入力されています。

私のウィンドウには、グリッドのフィルタリングに使用するフォームのあるパネルがあります。すべての「フィルター」はstore.load()パラメーターとして呼び出しで渡され、PHPスクリプトはクエリを完了してデータを返します。

私の問題は、いくつかのフィルターがあり、ページングツールバーの次のボタンをクリックすると、フィルターが消えて、追加のパラメーターなしでストアがロードされることです。nextPage()/ prevPage()呼び出しで追加のパラメータを送信するにはどうすればよいですか?

編集:私はを使用して解決しstore.on('beforeload')ました、これが私の解決策です:

store.on('beforeload', function(store, operation, opts){
   operation.params={
       // yuor params here
       param1: param1Value,
       param2: param2Value
   };
}, this);
4

2 に答える 2

0

ページングツールバーのmoveNextメソッドとmovePreviousメソッドをオーバーライドする必要があります。これらのメソッドでは、PHPに渡す必要のあるすべてのカスタムパラメーターを含むオブジェクトを渡すことができます。

/**
 * Move to the next page, has the same effect as clicking the 'next' button.
 */
moveNext : function(){
    var me = this,
        total = me.getPageData().pageCount,
        next = me.store.currentPage + 1;

    if (next <= total) {
        if (me.fireEvent('beforechange', me, next) !== false) {
            me.store.nextPage({
                // all the custom params should go here
                param1 : 'value1'
            });
        }
    }
}

これで現在の問題を簡単に修正できますが、前/次のページがストアからフェッチされるたびにストアがこれらのカスタムパラメータを提供する一般的な修正が必要な場合は、loadPageメソッドをオーバーライドして、そこにカスタムパラメータを追加できます。

loadPage: function(page, options) {
    var me = this;

    me.currentPage = page;

    // add your custom params
    options = Ext.apply({
        param1 : 'value1'
    }, options);

    // Copy options into a new object so as not to mutate passed in objects
    options = Ext.apply({
        page: page,
        start: (page - 1) * me.pageSize,
        limit: me.pageSize,
        addRecords: !me.clearOnPageLoad
    }, options);

    if (me.buffered) {
        return me.loadToPrefetch(options);
    }
    me.read(options);
}

参照:

http://docs.sencha.com/ext-js/4-1/source/Paging.html#Ext-toolbar-Paging

http://docs.sencha.com/ext-js/4-1/source/Store.html#Ext-data-Store-method-nextPage

于 2013-03-15T19:39:34.423 に答える
0

あなたがあなたの答えを見つけたかどうかはわかりませんが、私は同じ問題を抱えていました。これが私が見つけたものです。

それが役に立てば幸い。

パラメータを使用して電話をかける場合、それは1回だけです。以前のバージョンでは、SenchaはbaseParamsを使用するように指示していましたが、新しいバージョンでは見つけることができませんでした。そこで、プロキシのextraParamsを次のように使用しました。

これは、データをフィルタリングするために使用するフォームボタンです

text: 'Filter',
handler: function() {
        /*
        get the form
        get a record object and set its data
        */
        var form = this.up('form').getForm();
        var record = form.getRecord();
        form.updateRecord(record);

        for(name in record.data){
            if (record.data.hasOwnProperty(name))
                envelopeStore.setExtraParam(name, record.data[name]);
        }
        /*
        envelopeStore.getProxy().extraParams = record.data;
        *I have some constant params so I needed to add them in a loop as above
        *you can simply use this
        */

        envelopeGrid.child('pagingtoolbar').moveFirst(); 
        /*
        do not load store data. It does not change paging. go to first page instead
        */
    }    
于 2013-12-05T09:10:15.793 に答える