Sencha Touch: прокрутка во вложенном списке вверх на спине, как я могу отключить это? - PullRequest
0 голосов
/ 05 сентября 2018

У меня есть рабочий вложенный список. Когда я возвращаюсь назад, нажимая кнопку «Назад», он корректно загружает предыдущий список, НО, кажется, по умолчанию он прокручивается до самого верха.

Это раздражает, потому что, скажем, я нажимаю на элемент списка № 50 и щелкаю назад, он должен показывать список, расположенный назад на той позиции, где я был (на позиции 50), не прокручиваться вверх на позиции 1. Это заставляет меня прокручивать вниз вплоть до пункта 50, чтобы продолжить исследовать, где я был.

Так есть ли способ отменить поведение "прокрутка сверху вниз" вложенного списка? Любой способ взломать это в коде ценится

1 Ответ

0 голосов
/ 06 сентября 2018

Да, вы можете использовать метод scrollToRecord() для вашего списка на back событие в NestedList. Как это

lastActiveList.scrollToRecord(node)

Другой способ

Вы можете установить предыдущую позицию прокрутки, используя getScrollable(). Вам необходимо использовать itemtap и back события NestedList.

  • При itemtap вы получаете текущую позицию прокрутки и устанавливаете в свой текущий активный список

    list.yPosition = list.getScrollable().getScroller().position.y;
    
  • И на кнопке назад вы снова можете установить ту же самую предыдущую позицию прокрутки для вашего списка.

    lastActiveList.getScrollable().getScroller().scrollTo(0, lastActiveList.yPosition);
    

Можно проверить с рабочим FIDDLE

КОД SNIPPET

Ext.application({
    name: 'Sencha',

    launch: function() {

        Ext.define('ListItem', {
            extend: 'Ext.data.Model',
            config: {
                fields: ['text']
            }
        });

        Ext.create('Ext.data.TreeStore', {
            model: 'ListItem',

            storeId: 'listItemStore',

            defaultRootProperty: 'items',
            root: {
                items: items
            }
        });

        Ext.create('Ext.NestedList', {

            fullscreen: true,

            store: 'listItemStore',

            listeners: {

                itemtap: function(tree, list, index, target, record, e, eOpts) {
                    list.yPosition = list.getScrollable().getScroller().position.y;
                },

                back: function(btn, node, lastActiveList) {
                    lastActiveList.getScrollable().getScroller().scrollTo(0, lastActiveList.yPosition);
                }
            }
        });
    }
});
...