![]() |
Цитата:
Цитата:
Похоже наши мысли близки, просто ты даешь совет "общим случаем", я же советую под конкретно этот. |
Тигер, вот смотри пример. Скажем, текстовая кнопка. Какие у нее важные параметры, которые нужно задавать сразу в конструкторе? Наверняка ты скажешь, что текст только. А все остальное уже делаем через сеттеры. Но человеку нужно в большинстве случаев еще и настройки шрифта. Ага, делаем обязательным параметром и текстФормат. Но для всех трех стейтов нужен свой стиль. Три текстФормата. Итого - 4 параметра. Кнопка должна работать же, не просто так. Пятый параметр - метод, что срабатывает по клику. Пять параметров. Конструктор перегружен?
|
Цитата:
Добавлено через 7 минут P.S. Я бы вынес в конструктор, только то, что наиболее часто используется. Но все равно найдутся ситуации в которых будет неудобен любой подход. В свое время в компонентах MinimalComps был пустой конструктор, но после того как они стали популярны и достаточное количество пользователей возопило о параметрах в конструкторе, параметры были добавлены. Вам нужен фидбек от пользователей :) |
alatar, смотрите, я как вижу: чем меньше телодвижений, тем лучше.
Код AS3:
Код AS3:
Мы здесь спорим об удобстве. Мне удобен первый вариант с его возможными вариациями - обджекты, обязательные параметры, обязательные параметры с дефолтными значениями. |
Цитата:
|
Реализуйте оба (как выше говорил Psycho Tiger). Есть ситуации, когда невозможно задать сразу все параметры (например они зависят от ввода пользователя или от другого компонента), ну или необходимо динамически менять параметры. В чем собственно проблема? Просто в конструкторе все параметры должны быть с дефолтными параметрами.
|
Если удобен - делай первый, конечно. Только мне кажется через 2-3 года он тебе станет неудобен :)
По поводу кнопки - только текст. Передавать текстформат чаще всего ненужно, нужно просто кнопку на которой уже будет отформатированный текст. (формат задаётся как то извне, а не при создании кнопки - 95% кнопок имеют один стиль текста на них). Когда я делаю кнопку - передаю ей только текст. Кнопка наследуется от компонентна кнопки, где ей задаётся этот самый текстформат и графика кнопки. Цвет, размер меняется сеттером, причем меняется не текстформат, а именно просто цвет - мне это куда удобнее, чем каждый раз делать новый текстформат и вбивать туда тучу параметров. Но опять же по ситуации - может, у тебя все кнопки разные. Цитата:
Ну, или мне повезло :) |
Какая разница, сколько у конструктора кнопки параметров, если не вызывать его напрямую?
У меня два параметра (необходимых) у "дефолтной" функции добавления кнопки - ключ XML кнопки, коллбэк =) addButton("MenuPlay", clickPlay) - у меня всех |
Цитата:
|
Цитата:
Цитата:
|
Цитата:
Цитата:
Цитата:
|
Цитата:
|
iNils, вы имеете в виду, что вот так делать не есть хорошо?
Код AS3:
А, ну да, сохраняется же ссылка на tf... |
Нет. Вы спокойно можете так сделать. Но речь шла о нескольких TextFormat. Для этого лучше создать отдельные класс Style и указать все TextFormat там. А в MyClass передать style.
Что касается ссылки на tf, то можно сделать хитрый ход. Так как TextFormat не имеет метода clone, то при задании tf задать его для текстового поля, а только потом с этого же поля и записать TextFormat в переменную, которая будет хранить его для данного состояния, при условии, что начальное значение _tf равно null. |
Цитата:
От себя - написать свой clone не сложно - я если надо для себя сделаю прослойку-патч TextFormat, или функцию cloneTextFormat. Цитата:
@iNils: alatar прав, можно долго рассуждать кто что использует, а кто что нет. Опытные разработчики используют компоненты, а если что-то используется без компонента, но ему нужен инвалидатор - он пишется с нуля. Вообще реализация инвалидатора скрыта от того, кто использует этот класс/компонент, а речь идёт сейчас об интерфейсе - как удобней передавать. Короче, спорить можно долго :) |
Цитата:
Код AS3:
Цитата:
|
Цитата:
Ну и обратное не всегда верно. Это как если ты хороший повар и ты любишь делать салаты. Но если ты не любишь делать салаты - это не значит что ты плохой повар ;) По поводу кода - я правильно понимаю что где-то в недрах TextField`а при установке defaultTextFormat происходит клонирование TextFormat? Спасибо, не знал ) |
>>затем используется везде _fmt, который является клоном fmt созданного самим текстовым полем.
выходит, что _fmt не нужен вовсе: Код AS3:
|
Не при установке, а когда забираешь. Иначе бы можно было просто менять сам TextFormat, и его изменения должны сразу же отображается, а этого не происходит без переназначения его текстовому полю.
Добавлено через 5 минут silin, это зависит от задумки. Если ты будешь брать TextFormat несколько раз подряд, то каждый раз будет происходить копирования. Я хотя и не измерял, но думаю, что это будет более трудозатратно, чем хранить уже готовую копию. |
Цитата:
Вообще мои рассуждения такие: TextFormat не наследуется от EventDispatcher`а, а значит путей что-то сказать TextFormat`у TextField`у нету. Поэтому изменяя поля TextFormat `а изменения в TextField`е не могут происходить. Поэтому обновление отображения текста в текстовом поле происходит в сеттере defaultTextFormat (ну и в setTextFormat). Однако твоё утверждение что defaultTextFormat клонируется когда забираешь тоже верно: Код AS3:
Код AS3:
Код AS3:
|
Ты забыл про setTextFormat
|
Нет, не забыл.
defaultTextFormat должен применяться к новым символам, которые вводятся в поле. С хэлпа: Цитата:
P.S. дак на чем решим, происходит клонирование в сеттере? |
клонирование в геттере, ты же сам написал:
Цитата:
|
А, ну так у тебя же appendText используется.
|
Цитата:
@iNils: просто странно это... раньше как-то не задумывался, делал defaultTextFormat и присваивал текст - ок было. А тут на тебе - appendText не работает. Тут провел тестов несколько, разобрался почему. Сеттер text`а проверяет "бесстильные" символы и устанавливает им defaultTextFormat Код AS3:
Теперь мы можем проверить создаётся клон в сеттере или нет: Код AS3:
Резюме: клон TextFormat`а создаётся как в сеттере, так и в геттере. |
| Часовой пояс GMT +4, время: 06:22. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.