Автозаполнение Flash Builder 4 перестает работать с несколькими тегами сценариев - PullRequest
0 голосов
/ 12 октября 2011

У меня постоянная проблема с Flash Builder 4 в очень специфическом случае, когда автозаполнение intellisense перестает работать.

Это происходит, когда я использую встроенные компоненты в группе данных. У меня есть один тег Script для класса компонента, а затем в DataGroup у меня есть тег Component под itemRenderer и тег Script под тегом класса этого компонента. В этот момент intellisense перестает работать. Кто-нибудь сталкивался с этим и нашел обходной путь?

Вот пример исходного кода. Загрузите его в Flash Builder, и если у вас возникла та же проблема, что и у меня, автозаполнение не будет работать в первом теге Script. Это раздражает, так как я люблю использовать встроенные компоненты.

<?xml version="1.0" encoding="utf-8"?>
<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009" 
 xmlns:s="library://ns.adobe.com/flex/spark" 
 xmlns:mx="library://ns.adobe.com/flex/mx" width="400" height="300">
  <fx:Script>
    <![CDATA[
      //Try to use auto-complete
      //It doesn't work
      var p:Object;
    ]]>
  </fx:Script>
  <s:DataGroup>
    <s:itemRenderer>
      <fx:Component className="MyItemRenderer">
        <s:Group implements="mx.core.IDataRenderer">
          <fx:Script>
            <![CDATA[
              //auto-complete is ok here...
              private var _data:Object;

              public function get data():Object {
                return _data;
              }

              public function set data(value:Object):void {
                _data = value;
                invalidateProperties();
              }
            ]]>
          </fx:Script>
        </s:Group>
      </fx:Component>
    </s:itemRenderer>
  </s:DataGroup>
</s:Group>

Ответы [ 2 ]

0 голосов
/ 25 апреля 2012

Хорошо, вот еще один обходной путь, который работает лучше, поскольку он позволяет мне сохранять код средства визуализации элементов в том же файле mxml с минимальными изменениями.Я нашел это совершенно случайно.Вместо того, чтобы определять встроенный тег <fx:Component> средства визуализации элемента как дочерний элемент тега <s:itemRenderer>, вы перемещаете его в тег <fx:Declarations> и присваиваете ему имя класса.Затем поместите это имя класса в тег <s:itemRenderer>.Это немного лучше для меня, чем экстернализация компонента рендеринга элементов.

Вот простой пример:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
         xmlns:s="library://ns.adobe.com/flex/spark" 
         xmlns:mx="library://ns.adobe.com/flex/mx">
  <fx:Declarations>
    <fx:Component className="PrintLine" id="printLineFactory">
      <s:Label implements="mx.core.IDataRenderer" width="100%">
        <fx:Script>
          <![CDATA[
            private var _data:Object;

            public function get data():Object {
              return _data;
            }

            public function set data(value:Object):void {
              _data = value;
              invalidateProperties();
            }

            override protected function commitProperties():void {
              super.commitProperties();
              if (_data) {
                text = String(_data);
              }
            }
          ]]>
        </fx:Script>
      </s:Label>
    </fx:Component>
  </fx:Declarations>
  <fx:Script>
    <![CDATA[
      //auto-complete works here now!
    ]]>
  </fx:Script>
  <s:layout>
    <s:VerticalLayout />
  </s:layout>
  <s:Scroller height="100">
    <s:viewport>
      <s:DataGroup width="100%">
        <s:layout>
          <s:VerticalLayout />
        </s:layout>
        <s:itemRenderer>
          PrintLine
        </s:itemRenderer>
      </s:DataGroup>
    </s:viewport>
  </s:Scroller>
</s:Application>

То, что я должен сделать это, все еще глупо, и я все еще ненавижу Adobe,: - (

ОБНОВЛЕНИЕ: использование имени класса «PrintLine» работает только в приведенном выше коде, поскольку корневой тег является тегом приложения. В пользовательских подкомпонентах вместо этого необходимо привязаться к заводской ссылке:

<s:itemRenderer>{printLineFactory}</s:itemRenderer>
0 голосов
/ 19 апреля 2012

Это из-за реализации IDataRenderer во встроенном визуализаторе элементов. Если вы удалите это или создадите элемент рендерера элементов, intellisense / autocomplete должен работать как положено.

...