- *Flex *Дроид *Юзабилити *Прагматизм— код для перехвата клика
Андроид предлагает Джавистам те удобства, что были у флэшеров несколько лет назад, а теперь их во флэше нет. Сравните код для добавления обработчика клика, андроид против флекса:
Android:
mButton.setOnClickListener(listenerFunction)
Flex:
mButton.addEventListener(MouseEvent.CLICK, listenerFunction)
Пора, пора адобу спохватиться и наплодить удобных методов-шорткатов — это сдкелает флекс истинно народной технологией.
Я хочу во Флексе:
mButton.onClick(listenerFunction)
А вы — хотите?#607604from web, 22 months ago
Replies (22)
- @develar:Мы не хотим. Мы это сделали для себя. Пока что не opensource. Называется это Action messages — developer.apple.com Только в Cocoa это еще более лучше. Меня не касается как пользователь ткнул на кнопку, меня не касается тип кнопки, меня вообще ничего не касается кроме одного — с объектом произведено некоторое действие и все что мне нужно — тупо поставить action handler: function set action(value:Function):void.#607604/1from develarA17CE691, 22 months ago
- @yelbota:Тут вскрывается недостаток экшнскрипта. Нужно, что бы ссылки на функции можно было типизировать. На пример MouseEvent->Void. Вот тогда это будет иметь смысл. Для личных проектов я написал нечто подобное, но это для haXe. eMouseClick.aL(mouseClick_handler);#607604/3from Home7B2E5600, 22 months ago
- @develar:@yelbota то, что AS убог, это ежу понятно. Но отсутствие нормальной реализации интерфейсов и прочая не повод для такой убогой архитектуры. Меня не касается все то что под капотом — дай мне нормальный appkit. И, да, не надо тут в этом примере eMouseClick — тебя что, касается, может у меня рук нет и кнопку нажал как-то иначе? просто action ;)#607604/4from develarA17CE691, 22 months ago, in reply to /3
- @develar:@rostag мы рассматриваем не в неком неограниченном применении — а в конкретном — control. NSControl’s cell. Что мы хотим от пункта меню? Что мы хотим от кнопки? Данный виджет UI означает и предназначен для совершения некого действия, так? Разумеется, что это на уровне вас как app dev — который тупо кидает control на экран и связывает ее с неким кодом обработчика. На уровне вас как разработчика LAF — вы работаете на уровне нативной платформы (то есть оперируете click/touch).#607604/6from develarA17CE691, 22 months ago, in reply to /5
- @Constantiner:В Androed SDK уже есть closures? Там особая версия Java или я что-то пропустил?#607604/7from ConstantinE90F1473, 22 months ago
- @Constantiner:Вдобавок, на минуточку, в AS3 была выбрана стандартная модель DOM Level 3. Тут выбирать: либо свое, либо стандарт. Они выбрали стандарт. Давайте их ругать :)#607604/8from ConstantinE90F1473, 22 months ago
- @develar:@Constantiner забавляют стандарты и их реализации на конкретном языке без учета его особенностей/возможностей. Но тут это не причем — тут вся соль в том, что меня как тупого высокоуровнего кодера (клиента appkit) клепающего связку интерфейса к коду обработки не касается весь этот капот — пусть разработчики LAF думают и мечтают ночами об native event model, а я хочу тупо просто послать сообщение чушку-контролу, что вот вся его жизнь и смысл существования в том, чтобы он вызвал мой некий метод когда будет совершено действие — более меня ничего не интересует.#607604/9from develarA17CE691, 22 months ago, in reply to /8
- @Constantiner:@develar Нечестно получается. Я всегда тебе стараюсь отвечать понятным русским языком, а ты пишешь ответ не для меня, а для себя. Может, у меня тоже плохо получается писать доходчиво? Буду стараться улучшать коли так. Но и ты уж постарайся. Хотя бы в ответах. Потому как по существу я сейчас тебе ответить ничего не могу. Слова по отдельности понятны, а вот вместе никак не могу сопоставить :(#607604/11from ConstantinE90F1473, 22 months ago, in reply to /9
- @develar:@Constantiner На уровне application developer, то есть человека в задачу которого входит лишь использование некого application framework (appkit), все что мне нужно, это способ выразить мою задачу без каких-либо дополнительных работ: задача чтобы в ответ на некое действие с control был вызван мой код — я выбираю в в панели Library соответствующий HIG control и ставлю ему action — ту функцию, которая должна отработать как результат действия пользователя. В этом плане cocoa предлагает нам (app developers) предельно простую и удобную концепцию Targets and Actions ( developer.apple.com ) — меня на этом уровне не касается как будет произведено действие над NSControl’s cell — меня не касается вся транзакция (ее начало, механизм отката) — меня касается только факт коммита транзакции.
А вот разработчики LAF — look and feel ( en.wikipedia.org ), вот они то как раз и работают на этом уровне — "DOM Level 3". Поэтому я и написал, что "тут это не причем" – мы то, как я понял из первоначального текста и вообще по контексту, позиционируем себя именно как app dev — то есть нам дается некая кнопка и наша задача обработать транзакцию взаимодействия с ней (а не то что нам дается некий bare flash sprite).#607604/13from develarDD79FDCA, 22 months ago, in reply to /11 - @rostag:@develar
>> пусть разработчики LAF думают и мечтают ночами об native event model
>> а я хочу тупо просто послать сообщение чушку-контролу, >> вся его жизнь и смысл существования в том, чтобы он вызвал мой некий метод когда будет совершено действие — более меня ничего не интересует.
Абсолютно согласен. Реализация на нативном языке может быть любой — но для пользователя фреймворка все должно быть максимально просто и — простите — казуально, это обеспечивает минимальное количество ошибок при конечном применении фреймворка и кодировании. Должны быть
шорткаты — торчащие из фреймворка наружу методы-упростители всего, с короткими и легко запоминающимися именами.
Костя, я не понял, почему этот коммент Девелара показался тебе запутанным.#607604/14from web, 22 months ago, in reply to /9 - @rostag:@Constantiner Конкретно кусок кода выглядит вот так:
// Register handler for UI elements
mAddAccountButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Log.d(TAG, "mAddAccountButton clicked");
launchContactAdder();
}
});#607604/15from web, 22 months ago, in reply to /7 - @Constantiner:@rostag Обрати внимание на этот new и пойми, что способ этот намногго более дурацкий, чем можно придумать в AS. Создается специальный класс ради одного метода-обработчика. В этом проблема языка Java. Но, вроде, в Java 7 это может измениться, и могут появиться closures (замыкания).#607604/16from ConstantinE90F1473, 22 months ago, in reply to /15
- @Constantiner:@rostag Ну, признаться честно, на уровне смысла непонятен его язык вообще, но тут коммент мне, надо что-то ответить, а я не могу понять сам посыл :( Наверное, я не на той волне. Это не значит, что Володе надо менять стиль. Но если он вдруг почему-то захочет написать чтог-то именно мне, коммент или вопрос, то надо знать, что если я не ответил, то потому, что не понял :( Опять же, не призываю под меня подстраиваться. Ты, Рост, показал мне, что проблемы лишь у одного меня, а это не повод что-то менять.#607604/17from ConstantinE90F1473, 22 months ago, in reply to /14
- @Constantiner:@develar Тогда повторюсь. Есть два способа что-то реализовать: как лучше и опираясь на стандарты. Адобы решили опереться на стандарты. Возможно, они тупняки. Но доля плюсов в этом решении есть. Например, то, что традиционные JS-девелоперы, по замыслу Адобов, смогут приобщиться к процессу намного проще. Ты мыслишь с точки зрения гика, они с маркетинговой. Истина по центру :)#607604/18from ConstantinE90F1473, 22 months ago, in reply to /13
- @develar:@Constantiner нет. я в этом топике говорю исключительно с позиции и в рамках app developer. @rostag поставили задачу, чтобы был некий объект, посредством которого пользователь вызывает некое действие. он пишет код, а потом тупо открывает IB (interface builder), тупо тащит из панели control по HIG (тупо, не думает, должна быть push button), тупо button.action = mySuperMethod (тупо, не думает, так как это actioncell и все — пусть хоть лунные человечки через Марс на самом деле начинают транзакцию и отвечают за механизм отката). Все. Если я захочу потрахаться (хотя это слово будет грубовато если применять его не к flex, а к cocoa) и проникнуть вглубь как же там реализовано, захочу написать новый LAF — вот тогда я и буду тратить время на разбирательство нативной реализации — а так — меня интересует control лишь в рамках контракта (или протокола, если говорить терминами Apple, а не Java) минимально необходимого — Action Cell. Так то, ежу понятно, у меня, как у component developer (laf), должен быть максимально приближенной к нативности API.#607604/19from develarDD79FDCA, 22 months ago, in reply to /18
- @Constantiner:@develar Ок. Но я не фантазер, а прочитал пост Роста совсем не так, а типа: смотрите, пацанчики, я сейчас изучаю новую платформу, а там не так, как в AS, а по-другому, и это мне нравится больше! Это если без фантазий и философии. И по существу возразил Росту, что он ошибается, на той платформе не настолько просто, как он описал, и тоже хватает неприятных проблем. А ты начал о наболевшем :) Что, в общем, вполне интересно :) Но меня, как реалиста, на данный момент не сильно волнует.#607604/20from ConstantinE90F1473, 22 months ago, in reply to /19
- @Constantiner:@Constantiner Хотя Рост в посте предложил поделиться хотелками. Прости меня. Фантазии не оффтоп :)#607604/21from ConstantinE90F1473, 22 months ago, in reply to /20
- @rostag:@Constantiner Да, я понял — и согласен с тобой в том, что создавать ради обработки экземпляр — излишество.
Но тут речь все же о другом, а именно о названии метода, прикрепляющего обработчик, независимо от того, каков механизм конструирования самого обработчика.#607604/22from web, 22 months ago, in reply to /16 - @rostag:@Constantiner Да, наверное я неточно — и наверное даже умышленно сгустил краски, первые впечателния и все такое :)#607604/24from web, 22 months ago, in reply to /20
