1

我有一个非常大的项目列表,我想使用 sencha touch 在移动应用程序中显示它们。该列表是分页的,用户可以从任何页面开始查看。Sencha Touch 2 有一个非常好的分页存储,列表有一个 ListPaging 插件,可以帮助在项目末尾加载新的项目。我正在尝试调整此插件,以便可以从以前的页面加载项目。问题是:在我用上一页重新加载商店后,如果我将“clearOnPageLoad”配置选项设置为 false,新的 item 将附加到列表中,而不是放在开头。我找不到任何方法来改变这种行为。任何帮助表示赞赏。

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 回答