Sencha Touch: обработчик кнопок вызывается дважды за один клик - почему? - PullRequest
3 голосов
/ 23 июня 2011

Мой обработчик кнопок вызывается дважды - один раз для mousedown / touchstart и второй раз для mouseup / touchend.

Это происходит как на моем устройстве iPhone, так и в браузере Chrome.

Использование ST 1.1

Я не нашел никаких ссылок на эту проблему, которая, кажется, предполагает, что что-то в моем env неверно, но у меня заканчиваются вещи, чтобы проверить ...

Изучение объектов событий, переданных обработчику в Chrome DevTools. Я вижу, что они оба имитируют события «касания», первое происходит из «mousedown», а второе - из «mouseup».

Есть идеи?

EDIT:

Я обнаружил, что это происходит, когда я добавляю вызов (даже с пустым обработчиком) в Ext.EventManager.onDocumentReady.

Если я удаляю этот вызов, я получаю только щелчки мышью, как и ожидалось.

Если я заменю его на Ext.onReady, это сработает !!! Это действительно сбивает с толку, так как одно является псевдонимом для другого ...

Воспроизведение кода:

<!DOCTYPE html>
<html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

    <script src="resources/Sencha/sencha-touch-debug.js" type="text/javascript"></script>
    <link href="resources/Sencha/sencha-touch.css" rel="stylesheet" type="text/css" />

    <script type="text/javascript">
        MyPanel = Ext.extend(Ext.Panel, {
            fullscreen: true,

            initComponent: function() {
                this.items = [{
                    xtype: 'button',
                    text: 'Login',
                    handler: this.myHandler,
                    scope: this
                }];

                MyPanel.superclass.initComponent.apply(this, arguments);
            },

            myHandler: function(b, e) {
                console.log(e.event.type);
            }

        });

        Ext.EventManager.onDocumentReady(function() {

        });

        Ext.onReady(function() {
            new MyPanel();
        });
    </script>
    </head>
    <body></body>
</html>

1 Ответ

0 голосов
/ 01 декабря 2011

У меня была эта проблема с недоработанными узлами связи. Мне удалось это исправить, съев touchend события на A узлах:

document.addEventListener('touchend', function(e) {
  e.preventDefault() if e.target.localName == 'a')
}, true);

Это не совсем ваша проблема, но есть вероятность, что ваша проблема похожая, вызванная отправкой на виджет и touch, и click событий. Здесь - это метод, который я использую для рассылки спама на моей консоли с максимально возможным количеством отправляемых событий (это необработанные события DOM, а не события Ext). Это полезно для устранения неполадок низкого уровня, подобных этой.

...