Flex 3 - проблемы с редактируемым свойством textArea - PullRequest
0 голосов
/ 29 мая 2010

У меня проблемы со свойством "редактируемый" элемента управления textArea.

У меня есть компонент: OrderView.mxml и связанный с ним класс данных OrderViewData.as.

Orderview.mxml находится внутри viewStack, чтобы включить навигацию от одного компонента к другому. В этом конкретном случае OrderView.mxml вызывается другим компонентом: SearchResult.mxml. Таким образом, я могу перейти от SearchResult.mxml к OrderView.mxml и обратно к SearchResult.mxml ...

OrderView.mxml имеет элементы управления textArea и textInput, которые должны быть редактируемыми или нередактируемыми в зависимости от свойства var isEditable: Boolean from OrderViewData.as.

Когда приложение запущено, isEditable = true. Таким образом, все элементы управления textInput и textArea доступны для редактирования при первом обращении пользователя к OrderView.mxml. Когда пользователь нажимает на кнопку порядка из OrderView.mxml, isEditable = false. Когда пользователь возвращается к SearchResult.mxml, isEditable = true (снова) -> до тех пор, пока все здесь работает нормально.

Дело в том, что когда пользователь снова возвращается к OrderView.mxml (и далее), даже если свойство isEditable = true, элементы управления textArea по-прежнему недоступны для редактирования ... Но элементы управления textInput доступны для редактирования!

Вот код для вашего понимания: OrderView.mxml

<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" 
    backgroundColor="#F3EDEC">

    <mx:TextArea 
        id="contentTA"
        text="{OrderViewData.instance.contentTA}"
        enabled="{OrderViewData.instance.isEnabled}" 
        width="100%" height="51" 
        maxChars="18" styleName="ORTextInput"
        focusIn="if(OrderViewData.instance.isEditable) contentTA.setSelection(0, contentTA.length)"
        editable="{OrderViewData.instance.isEditable}"/>

    <mx:TextInput id="contentTI" 
        text="{OrderViewData.instance.contentTI}"
        width="40" height="18" maxChars="4" 
        styleName="ORTextInput"
        change="contentTI_change()"
        focusIn="if(OrderViewData.instance.isEditable) contentTI.setSelection(0, contentTI.length)"
        editable="{OrderViewData.instance.isEditable}"/>
</mx:Canvas>

Я что-то упустил?

Ответы [ 2 ]

1 голос
/ 29 мая 2010

Вы сделали переменную isEditable [Bindable]?

0 голосов
/ 31 мая 2010

Ну, похоже, у кого-то есть больше идей ...

Я придумал не очень чистое решение. Но это работает ...

Я использовал функцию init в событии show компонента, где я создаю элемент управления и добавляю его к соответствующему родителю. Таким образом, код mxml, написанный ранее, был удален =)

Эта функция инициализации выглядит следующим образом:

private function init():void
{
    // contentTA
    if(contentTA != null && parentBox.contains(contentTA))
        parentBox.removeChild(contentTA);

    contentTA = new TextArea;

    contentTA.text = OrderViewData.instance.contentTA;
    contentTA.enabled = OrderViewData.instance.isEnabled;
    contentTA.percentWidth = 100;
    contentTA.height = 51;
    contentTA.maxChars = 50;
    contentTA.styleName = "ORTextInput";
    contentTA.editable = OrderViewData.instance.isEditable;
    contentTA.addEventListener(FocusEvent.FOCUS_IN, focusIn);

    parentBox.addChild(contentTA);

    // same thing for all the other textAreas of my component       
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...