Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 30.06.2015, 19:48
Аватар для khusamov
Соединяю Node.js и Ext JS
Отправить личное сообщение для khusamov Посмотреть профиль Найти все сообщения от khusamov
 
Регистрация: 25.06.2009
Сообщений: 1,033

Задать scope для обработчика события drag весьма затруднительно
Я пытаюсь сделать обработчик события drag:

draggable: {
	listeners: {
		drag: "onDrag"
	}
},

onDrag: function() {...}


Но это не работает.

Воспользоваться initComponent нельзя, так как объект draggable не существует, а dd запрещен документацией. Да и вообще, как выяснилось, объект dd не доступен в initComponent... он доступен после события boxready.

И как мне в таких условиях задать scope?

Последний раз редактировалось khusamov, 30.06.2015 в 21:28.
Ответить с цитированием
  #2 (permalink)  
Старый 30.06.2015, 21:27
Аватар для khusamov
Соединяю Node.js и Ext JS
Отправить личное сообщение для khusamov Посмотреть профиль Найти все сообщения от khusamov
 
Регистрация: 25.06.2009
Сообщений: 1,033

После серии экспериментов выяснилось, что если установить draggable: true, то в компоненте будет вызываться метод onDrag, если он определен. Странное поведение какое-то.

Причем метод onDragEnd или onDragend не вызывается, хотя по логике должен.

Последний раз редактировалось khusamov, 30.06.2015 в 21:55.
Ответить с цитированием
  #3 (permalink)  
Старый 30.06.2015, 21:59
Профессор
Отправить личное сообщение для siber-biber Посмотреть профиль Найти все сообщения от siber-biber
 
Регистрация: 07.08.2013
Сообщений: 214

можно и в initComponent scope задать https://fiddle.sencha.com/#fiddle/pmg
Ответить с цитированием
  #4 (permalink)  
Старый 02.07.2015, 16:18
Аспирант
Отправить личное сообщение для bastrakov Посмотреть профиль Найти все сообщения от bastrakov
 
Регистрация: 27.03.2015
Сообщений: 31

давно уже не делал разных драгов, но если чего-то нет в initComponent, потому что оно еще не отрисовано, то оно уже есть в afterRender. а листенеры можно накладывать с помощью .on("onDrag"...
Ответить с цитированием
  #5 (permalink)  
Старый 02.07.2015, 22:44
Аватар для nohuhu
Профессор
Отправить личное сообщение для nohuhu Посмотреть профиль Найти все сообщения от nohuhu
 
Регистрация: 21.05.2015
Сообщений: 321

@bastrakov,

Не надо ничего делать в afterRender, особенно не надо инициализировать Drag'n'Drop. Всё это нужно делать в onBoxReady.

Почему, спросите вы? А всё просто: afterRender вызывается сразу после того, как компонент отрендерен в DOM, но до раскладки (layout). Делать что-либо с DOM в afterRender чревато forced reflow, а это очень больно в IE8 и на таблетках.

onBoxReady вызывается после того, как компонент первый раз прошёл через layout, и размеры элементов уже известны. Чтение/запись в DOM (в разумных пределах) не вызовет reflow, и проблем не будет.
Ответить с цитированием
  #6 (permalink)  
Старый 04.07.2015, 09:20
Аватар для khusamov
Соединяю Node.js и Ext JS
Отправить личное сообщение для khusamov Посмотреть профиль Найти все сообщения от khusamov
 
Регистрация: 25.06.2009
Сообщений: 1,033

Проблема в том, чтобы в onBoxReady что-то задать, нужно воспользоваться объектом this.dd, который в документации отсутствует. Что весьма печально... А ведь уже приходится пользоваться, так как иных вариантов не нашел.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
задать volume для тега audio Rinatus (X)HTML/CSS 2 29.01.2018 11:45
поиск классов внутри тега yozuul jQuery 24 14.06.2013 22:00
Алгоритм работы обработчика события salikoff Events/DOM/Window 1 20.09.2012 23:46
Дебаг js, или как найти обработчик события для тега jimm88 Events/DOM/Window 1 18.04.2012 15:11
События для вновь-вставленных тегов в DOM Mutagena jQuery 5 12.12.2011 19:56