1

senchatouchを使用してモバイルアプリに表示したいitensのリストが非常にたくさんあります。リストはページ付けされており、ユーザーはどのページからでも表示を開始できます。Sencha Touch 2には非常に優れたページ付けされたストアがあり、リストには、アイテムの最後に新しいitensをロードするのに役立つListPagingプラグインがあります。前のページからitensをロードできるように、このプラグインを適応させようとしています。問題は、前のページでストアをリロードした後、「clearOnPageLoad」構成オプションをfalseに設定している場合、新しいitensが最初に配置されるのではなく、リストに追加されることです。この動作を変更する方法が見つかりません。どんな助けでも大歓迎です。

4

1 に答える 1

0

Store.jsコードを少し読んだ後、何が起こるかを理解しました。previousPageの呼び出しは、loadPage(currentPage-1)の呼び出しであり、ajax呼び出しのパラメーターのみを変更するため、データの更新はできません。新しいデータを現在のページの前または後に配置する必要があるかどうかを確認します。

メソッド「doDataRefresh」は、ストアを更新するときに内部的に呼び出されるメソッドです。addRecordsがfalseに設定されている場合、このメソッドは新しいデータをロードするときにデータの内部配列をクリアします。trueに設定すると、最後にデータが追加されます。

        ... (internals of doDataRefresh)
        if (operation.getAddRecords() !== true) {
        for (i = 0; i < ln; i++) {
            record = currentRecords[i];
            record.unjoin(me);

            // If the record we are removing is not part of the records we are about to add to the store then handle
            // the destroying or removing of the record to avoid memory leaks.
            if (records.indexOf(record) === -1) {
                if (syncRemovedRecords && record.phantom !== true) {
                    removed.push(record);
                }
                else if (destroyRemovedRecords && !syncRemovedRecords && !record.stores.length) {
                    record.destroy();
                }
            }
        }
        data.clear();
        // This means we have to fire a clear event though
        me.fireEvent('clear', me);
    }

    if (records && records.length) {
        // Now lets add the records without firing an addrecords event
        me.suspendEvents();
        me.add(records);
        me.resumeEvents();
    }

この問題を完全に解決するには、storeメソッドをオーバーライドして次のようにします。

  • 「previousPage」の呼び出しは、新しいデータを現在のデータの前に配置する必要があるという事実を追跡します
  • doDataRefreshを変更して、フラグに基づいて、現在のストアアイテムの前または後に新しいデータを追加するかどうかを決定するようにします。

しかし、結局はストアを並べ替えるだけでした。ユースケースとしてはそれで十分でした。

于 2012-07-25T17:42:04.520 に答える