input text в контейнере
input text в контейнере
когда у меня в приложение находится только inputtext то нормально вводится текст,а когда добовляю List то почему то не работает,как решить проблему?
Re: input text в контейнере
Судя по сообщениям отсюда http://vkontakte.ru/topic-1_21734350 Flash-контейнер для приложений
такая проблема возникает у многих.
Я прочитал все сообщения, их там чуть больше 1000, два дня читал.
Там люди дают рецепты как избавиться от этой проблемы.
Эти рецепты я сохранял в текстовой файл, вот пригодилось.
не работают input-текстовые поля!
Да, есть проблемы со стандартным TextInput. А Вы пробовали использовать TextField типа Input? Если интересно мое мнение, я вообще не рекомендую использовать стандартные компоненты из-за их глючности и большого объема ненужного кода. Советую писать собственные компоненты, и будет все работать. Есть глюки в Safari под Маком, но они в какой-то степени разрешимы, но пока это опять-таки не самая серьезная проблема.
в опере не работают input-текстовые поля
причина неработания поля ввода найдена - наличие в флешке стандартного компонента DataGrid. Не используйте стандартные компоненты!
2 Андрей Рогозов.
Я выяснил причину, почему возникают ошибки текстовых полей (дело НЕ в компонентах флэш и "ненужном коде"):
package {
//в этом классе нет ни одного UIComponent, но ошибка все равно возникает
import flash.display.Sprite;
import flash.events.Event;
import flash.events.FocusEvent;
import flash.text.TextField;
import flash.text.TextFieldType;
import flash.system.SecurityDomain;
public class Main extends Sprite {
public function Main():void {
super.addEventListener(Event.ADDED_TO_STAGE, this._init);
}
private function _init(e:Event = null):void {
super.removeEventListener(Event.ADDED_TO_STAGE, this._init);
var tF:TextField = new TextField();
tF.y = 50;
tF.width = 200;
tF.height = 22;
tF.multiline = false;
tF.background = true;
tF.border = true;
tF.type = TextFieldType.INPUT;
super.addChild(tF);
super.stage.addEventListener(FocusEvent.MOUSE_FOCUS_CHANGE, this._onFocusChange);
}
private function _onFocusChange(e:FocusEvent):void{
// вот тут возникает ошибка
}
}
}
*** Нарушение безопасности изолированной среды ***
SecurityDomain "http://vkontakte.ru/app666016" пытался получить доступ к несовместимому контексту "http://cs4328.vkontakte.ru/u1198614/5c75c731d15953.zip"
Если я далее хочу написать свой обработчик фокуса, использовав e.preventDefault() в обработчике фокуса, у меня ничего не выйдет.
Проблема в способе загрузки флэшки. Пропишите грамотно SecurityDomain.
Далее, глянул ваш код:
1. Вы не удаляете слушателей, они остаются висеть в памяти. Например, такая конструкция:
_tween.addEventListener(TweenEvent.MOTION_FINISH, function (event:TweenEvent) : void
{
if (config.scale < 1)
{
var _loc_2:* = config.scale;
loader.scaleY = config.scale;
loader.scaleX = _loc_2;
}
addChild(loader);
removeChild(_progressBar);
loaded = true;
if (location)
{
onLocationChanged(location);
}
return;
}
оставляет эту функцию в памяти навсегда так же, как и экземпляр _tween. Нужно отписать _tween от этой функции внутри самой функции и обнулить _tween, на форуме flasher.ru есть элегантные решения, как это сделать.
Такие конструкции вообще не рекомендованы к использованию из-за особенностей работы сборщика мусора.
В остальных случаях тоже не нужно пренебрегать отпиской от событий (подписались, функцию выполнили, отписались), т. к. у флэшового GC проблемы с удалением объектов, подписанных друг на друга, из памяти.
--------------
а это нормально что под враппером не работают компоненты TextInput и TextArea?
нельзя ничего напечатать в них.
ОТВЕТ:
используйте TextField
TextField с type==TextFieldType.INPUT тоже не работает.
Да тут комплексная проблема, ComboBox не работает тоже...
Вот решение с прошлой страницы
root.addEventListener(MouseEvent.MOUSE_OVER, function (event:Event)
{
wrapper.parent.stageFocusRect = false;
wrapper.parent.focus = event.currentTarget;
});
-----------
я использую чуть улучшенный хак:
root.addEventListener(MouseEvent.MOUSE_OVER, function (event:Event)
{
wrapper.parent.stageFocusRect = false;
if (!(wrapper.parent.focus is TextField) || (wrapper.parent.focus.type != TextFieldType.INPUT))
wrapper.parent.focus = event.currentTarget;
});
иначе у меня фокус улетал из TextField при уведении с него курсора
такая проблема возникает у многих.
Я прочитал все сообщения, их там чуть больше 1000, два дня читал.
Там люди дают рецепты как избавиться от этой проблемы.
Эти рецепты я сохранял в текстовой файл, вот пригодилось.
не работают input-текстовые поля!
Да, есть проблемы со стандартным TextInput. А Вы пробовали использовать TextField типа Input? Если интересно мое мнение, я вообще не рекомендую использовать стандартные компоненты из-за их глючности и большого объема ненужного кода. Советую писать собственные компоненты, и будет все работать. Есть глюки в Safari под Маком, но они в какой-то степени разрешимы, но пока это опять-таки не самая серьезная проблема.
в опере не работают input-текстовые поля
причина неработания поля ввода найдена - наличие в флешке стандартного компонента DataGrid. Не используйте стандартные компоненты!
2 Андрей Рогозов.
Я выяснил причину, почему возникают ошибки текстовых полей (дело НЕ в компонентах флэш и "ненужном коде"):
package {
//в этом классе нет ни одного UIComponent, но ошибка все равно возникает
import flash.display.Sprite;
import flash.events.Event;
import flash.events.FocusEvent;
import flash.text.TextField;
import flash.text.TextFieldType;
import flash.system.SecurityDomain;
public class Main extends Sprite {
public function Main():void {
super.addEventListener(Event.ADDED_TO_STAGE, this._init);
}
private function _init(e:Event = null):void {
super.removeEventListener(Event.ADDED_TO_STAGE, this._init);
var tF:TextField = new TextField();
tF.y = 50;
tF.width = 200;
tF.height = 22;
tF.multiline = false;
tF.background = true;
tF.border = true;
tF.type = TextFieldType.INPUT;
super.addChild(tF);
super.stage.addEventListener(FocusEvent.MOUSE_FOCUS_CHANGE, this._onFocusChange);
}
private function _onFocusChange(e:FocusEvent):void{
// вот тут возникает ошибка
}
}
}
*** Нарушение безопасности изолированной среды ***
SecurityDomain "http://vkontakte.ru/app666016" пытался получить доступ к несовместимому контексту "http://cs4328.vkontakte.ru/u1198614/5c75c731d15953.zip"
Если я далее хочу написать свой обработчик фокуса, использовав e.preventDefault() в обработчике фокуса, у меня ничего не выйдет.
Проблема в способе загрузки флэшки. Пропишите грамотно SecurityDomain.
Далее, глянул ваш код:
1. Вы не удаляете слушателей, они остаются висеть в памяти. Например, такая конструкция:
_tween.addEventListener(TweenEvent.MOTION_FINISH, function (event:TweenEvent) : void
{
if (config.scale < 1)
{
var _loc_2:* = config.scale;
loader.scaleY = config.scale;
loader.scaleX = _loc_2;
}
addChild(loader);
removeChild(_progressBar);
loaded = true;
if (location)
{
onLocationChanged(location);
}
return;
}
оставляет эту функцию в памяти навсегда так же, как и экземпляр _tween. Нужно отписать _tween от этой функции внутри самой функции и обнулить _tween, на форуме flasher.ru есть элегантные решения, как это сделать.
Такие конструкции вообще не рекомендованы к использованию из-за особенностей работы сборщика мусора.
В остальных случаях тоже не нужно пренебрегать отпиской от событий (подписались, функцию выполнили, отписались), т. к. у флэшового GC проблемы с удалением объектов, подписанных друг на друга, из памяти.
--------------
а это нормально что под враппером не работают компоненты TextInput и TextArea?
нельзя ничего напечатать в них.
ОТВЕТ:
используйте TextField
TextField с type==TextFieldType.INPUT тоже не работает.
Да тут комплексная проблема, ComboBox не работает тоже...
Вот решение с прошлой страницы
root.addEventListener(MouseEvent.MOUSE_OVER, function (event:Event)
{
wrapper.parent.stageFocusRect = false;
wrapper.parent.focus = event.currentTarget;
});
-----------
я использую чуть улучшенный хак:
root.addEventListener(MouseEvent.MOUSE_OVER, function (event:Event)
{
wrapper.parent.stageFocusRect = false;
if (!(wrapper.parent.focus is TextField) || (wrapper.parent.focus.type != TextFieldType.INPUT))
wrapper.parent.focus = event.currentTarget;
});
иначе у меня фокус улетал из TextField при уведении с него курсора
Re: input text в контейнере
не очень понял куда этот код вставить?