Почему вы можете изменить идентификатор объекта в Actionscript, но при этом ссылаться на него со старым идентификатором? - PullRequest
0 голосов
/ 17 октября 2010

Например, во Flex 4

? Xml version = "1.0"?> Xmlns: mx = "library: //ns.adobe.com/flex/mx"
xmlns: s = "library: //ns.adobe.com/flex/spark ">

<s:layout> 
    <s:VerticalLayout/> 
</s:layout>

<fx:Script>
    <![CDATA[
        private function setLabel():void {

            trace ("the id is "+myButton.id);
            myButton.id = "yourButton";

        }

    ]]>
</fx:Script>

<s:Button id="myButton" label="Click Me" click="setLabel();"/>

следы, когда кнопка нажимается дважды: 'id is myButton', за которым следует 'idis yourButton '

Это не просто пустой запрос.Я надеялся изменить идентификатор пользовательских компонентов при заполнении ими основного приложения

Ответы [ 2 ]

0 голосов
/ 19 октября 2010

Помните, что MXML анализируется в ActionScript программой mxmlc. mxmlc использует атрибут ID тегов mxml для сопоставления с членом открытого класса во время компиляции. Изменение значения времени выполнения поля идентификатора не изменит структуру класса.

Пример:


<MyComponent>
  <Button id="myButton" />
&lt/MyComponent>

При компиляции mxmlc примерно преобразует его в:


package {
  class MyComponent {

     [Bindable]
     public var myButton:Button;

     // Other junk for class init, etc would show here...

  }
}

И затем компилируется в байт-код SWF. В этот момент атрибут ID является просто атрибутом и не влияет на функциональность класса. Вам действительно нужно назначить новый экземпляр Button на this.myButton, чтобы он изменился.

0 голосов
/ 17 октября 2010

Я бы предположил, что id, установленный в mxml, является именем переменной, которая также устанавливает внутренний идентификатор (myButton.id = "myButton"). Поэтому вы можете изменить myButton.id на "yourButton", потому что idи имя переменной - это разные свойства.

Странно, хотя я признаю.

Если бы вы захотели создавать пользовательские компоненты при заполнении вашего основного приложения, я бы искал другой подход, чемвыкладывая их все в mxml.Возможно, было бы лучше создать компоненты в Actionscript и установить их в MXML?(например, ваш главный класс - приложение mxml, а затем у вас есть класс, который выполняет тяжелую работу по созданию представления со всеми вашими именованными компонентами)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...