Диалог Dojo, проблема с iPad и виртуальной клавиатурой - PullRequest
1 голос
/ 17 июня 2010

Недавно я работал над проектом, в котором интерфейс должен работать для настольных компьютеров и планшетов (в частности, для iPad).

Одна проблема, с которой я сталкиваюсь, связана с диалоговым окном Dojo на iPad, когда происходит ввод текста.

В основном вот что происходит:

  1. Загрузить интерфейс Dojo с кнопками на iPad - ОК
  2. Нажмите кнопку (коснитесь), чтобы открыть диалоговое окно (высота и ширина 90%) - ОК
  3. Нажмите на текстовое поле (коснитесь), например DateTextBox или TimeTextBox - ОК, виртуальная клавиатура открыта
  4. Щелкните нужную дату или время в пользовательском интерфейсе (коснитесь) - ОК, но я не вижу все параметры, поскольку они длиннее размера экрана ...
  5. Попробуйте прокрутить вниз (проведите двумя пальцами вверх или нажмите «Далее» на клавиатуре) - не в порядке, и диалоговое окно переместится так, чтобы оно было вверху в верхней части области просмотра.

По сути, проблема в том, что диалог продолжает пытаться изменить положение.

Могу ли я остановить изменение размеров и позиционирование диалогов, если я улавливаю события окна onResize?

У кого-нибудь еще есть такая проблема с диалогами iPad и Dojo?

Кроме того, я обнаружил эту тему StackOverflow по обнаружению виртуальной клавиатуры, но это не сильно помогло в этом случае ...

iPad Web App: обнаружение виртуальной клавиатуры с помощью JavaScript в Safari?

Спасибо!

Ответы [ 3 ]

2 голосов
/ 19 апреля 2011

Как предлагается другой способ сделать это, переопределить функцию _position путем расширения объекта (или, возможно, относительного положения, или другого метода).Вот мое решение, которое позволяет диалогу быть помещенным в центр экрана только один раз.Возможно, есть лучшие способы изменить это, поиграв с событиями «прятки и показы», ​​но это соответствует моим потребностям.

2 голосов
/ 30 июля 2010

Я только вчера столкнулся с той же проблемой и нашел взломать, что не является элегантным решением. Если вы хотите остановить dijit.Dialog от изменения положения, вы можете:

1) Установите свойство ._relativePosition объекта dijit.Dialog (в данном случае это «pop») после вызова метода pop.show ():

pop.show();
pop._relativePosition = new Object(); //create empty object

Следующие шаги, вероятно, будут:

  1. Проверьте тип браузера и ОС: dojo или даже лучше BrowserDetect
  2. Проверьте, активирована ли виртуальная клавиатура, и отключите репозицию
  3. Расширить dijit. Диалог с пользовательским классом (обработать все исключения)
1 голос
/ 25 мая 2011

Вы можете переопределить функцию _position и вызвать функцию _position суперкласса только один раз.(См. http://dojotoolkit.org/reference-guide/dojo/declare.html#calling-superclass-methods)

if (!dojo._hasResource["scorll.asset.Dialog"]) {
    dojo._hasResource["scorll.asset.Dialog"] = true;
    dojo.provide("scorll.asset.Dialog");

    dojo.require("dijit.Dialog");

    dojo.declare("scorll.asset.Dialog", [dijit.Dialog], {
        _isPositioned: false,
        _position: function () {
            if(this._isPositioned == false) {
                // Calls the superclass method
                this.inherited(arguments);
                this._isPositioned = true;
            }
        }
    })
}
...