Я написал следующий пользовательский компонент SubNavBar.mxml:

<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" height="100" width="300"
 creationComplete="init()">

 <mx:Script>
  <![CDATA[
   import mx.collections.XMLListCollection;

   [Bindable] public var menuItems:XMLListCollection;

   private function init():void
   {
    trace("SubNav: config = "+menuItems);
   }


  ]]>
 </mx:Script>

 <mx:HBox y="30" id="menu">
  <mx:List dataProvider="{menuItems}"/>
 </mx:HBox>

</mx:Canvas>

Я устанавливаю этот компонент в родительский пользовательский компонент, используя следующий код:

<com:SubNavBar id="subNavMenu" menuItems="{subNavConfig}"
 x="10" y="-15">
</com:SubNavBar>

Каждый раз, когда функция trace выполняется в init(), свойство menuItems возвращает null. Похоже, у меня нет этой проблемы с другими типами переменных, такими как Boolean или String. Это связано с размером объекта XMLListCollection? Как я могу настроить этот пользовательский компонент SubNavBar с помощью свойства XMLListCollection и привязать его к элементу управления в компоненте?

Благодарность!

0
Scott Heath 12 Дек 2009 в 01:56

2 ответа

Лучший ответ

Я протестировал этот код, и мне показалось, что у меня все работает. Вы уверены, что правильно настроили переменную subNavConfig?

Вот код клиента, который я использовал:

// Test.mxml

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" initialize="onInit()" xmlns:ns="comp.*">
  <mx:Script>
    <![CDATA[
      import mx.collections.XMLListCollection;

      [Bindable]
      public var bookCollection:XMLListCollection;

      public function onInit():void
      {
        var books:XML = <books>
                          <book publisher="Addison-Wesley" name="Design Patterns" />
                          <book publisher="Addison-Wesley" name="The Pragmatic Programmer" />
                          <book publisher="Addison-Wesley" name="Test Driven Development" />
                          <book publisher="Addison-Wesley" name="Refactoring to Patterns" />
                          <book publisher="O'Reilly Media" name="The Cathedral & the Bazaar" />
                          <book publisher="O'Reilly Media" name="Unit Test Frameworks" />
                        </books>;

        var booklist:XMLList = books.book;
        bookCollection = new XMLListCollection(booklist);
      }
    ]]>
  </mx:Script>

  <ns:SubNavBar id="fb" menuItems="{bookCollection}"/>
</mx:Application>

И вот результат, который я получил:

SubNav: config = <book publisher="Addison-Wesley" name="Design Patterns"/>
<book publisher="Addison-Wesley" name="The Pragmatic Programmer"/>
<book publisher="Addison-Wesley" name="Test Driven Development"/>
<book publisher="Addison-Wesley" name="Refactoring to Patterns"/>
<book publisher="O'Reilly Media" name="The Cathedral &amp; the Bazaar"/>
<book publisher="O'Reilly Media" name="Unit Test Frameworks"/>
0
Wesley Petrowski 14 Дек 2009 в 19:21
Спасибо, что взглянули на мою проблему. Я настраиваю новый проект для тестирования вашего кода, но все еще получаю «SubNav: config = null»; однако я добавил элемент управления DataGrid в компонент SubNav, и он отображает данные, указанные в переменной XML books. Компонент SubNav, похоже, связывает XMLListCollection, но не вовремя для функции trace () в init () SubNav. Есть предположения?
 – 
Scott Heath
14 Дек 2009 в 18:26
Просто чтобы дважды проверить, вызываете ли вы onInit () для CreationComplete в main.xml?
 – 
Scott Heath
14 Дек 2009 в 18:44
Собственно, я вызываю onInit () в обработчике события инициализации. Я обновил ответ, включив в него тег приложения. Событие creationComplete срабатывает только после создания компонента и всех его дочерних элементов, поэтому к этому моменту функция init () в SubNavBar уже будет выполнена. Дополнительную информацию о событиях заказа можно найти на странице liveocs.adobe.com/flex/3/html/…
 – 
Wesley Petrowski
14 Дек 2009 в 19:32

Возможно, я что-то упускаю, но где вы настраиваете {subNavConfig}?

Изменить:

Это может быть из-за того, как он кастуется ... попробуйте что-нибудь вроде ...

var listcol:XMLListCollection = new XMLListCollection(configXML.destination.(@mapID == mapID).subSections);
0
Chris Gutierrez 14 Дек 2009 в 19:59
{subNavConfig} - это свойство родительского пользовательского компонента Destination.mxml. Это свойство устанавливается в main.mxml при создании экземпляра Destination, например. "destination.subNavConfig = configXML.destination. (@ mapID == mapID) .subSections as XMLListCollection". configXML - это результат события HTTP-запроса к локальному файлу setup.xml.
 – 
Scott Heath
14 Дек 2009 в 18:35