فليكس: مكونات بد أن ArrayCollection فارغة في وقت الحمل لا تجعل كما هو متوقع عند تحديث ArrayCollection

StackOverflow https://stackoverflow.com/questions/1631360

  •  06-07-2019
  •  | 
  •  

سؤال

وأنا جديدة على فليكس وأستخدمه TileList منضم إلى ArrayCollection. جمع مجموعة فارغ في وقت التحميل، ومن ثم يقوم بتحديث مع النتائج من دعوة صباحا HTTPService. والمشكلة هي أن عارضين البند لا يتم تقديمها كما هو متوقع، وأنا على التخمين لعدم وجود بيانات عندما تم تقديمها لأول مرة في وقت التحميل. وهنا مثال مبسط:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" >

  <mx:Script>
    <![CDATA[

      import mx.collections.ArrayCollection;

      [Bindable]
      public var myList1:ArrayCollection = new ArrayCollection();

      [Bindable]
      public var myList2:ArrayCollection = new ArrayCollection([{item:"foo"}, {item:"bar"}]);

      public function updateMyList():void
      {
          myList1.source = [{item:"foo"}, {item:"bar"}];
      }

    ]]>
  </mx:Script>

<mx:Button id="myButton" label="Update My List"
           click="updateMyList();"/>


  <mx:TileList dataProvider="{myList1}"
           direction="vertical"
           width="800" >

    <mx:itemRenderer>

      <mx:Component >

    <mx:Canvas backgroundColor="yellow" >
      <mx:Label text="{data.item}" width="800"  />
    </mx:Canvas>

      </mx:Component>

    </mx:itemRenderer>

  </mx:TileList>


<!-- This one renders as expected  -->

  <mx:TileList dataProvider="{myList2}"
           direction="vertical"
           width="800" >

    <mx:itemRenderer>

      <mx:Component >

    <mx:Canvas backgroundColor="yellow" >
      <mx:Label text="{data.item}" width="800"  />
    </mx:Canvas>

      </mx:Component>

    </mx:itemRenderer>

  </mx:TileList>

</mx:Application>

وستلاحظ أن TileList الثاني الذي يحتوي بيانات في وقت التحميل الارتباطات يجعل كما هو متوقع (800px واسعة)، عض TileList الأولى التي يتم تقديمها ليس العرض الصحيح ولديه أشرطة التمرير حوله.

هل يمكن لأحد أن يفسر لماذا يحدث هذا أو حتى تقديم بعض احترف العمل لتجنب هذا؟

والتحيات،

وكريس

هل كانت مفيدة؟

المحلول

ومن المرجح أن هذا القسم هو الذي يسبب المشاكل:

public function updateMyList():void
          {
              myList1.source = [{item:"foo"}, {item:"bar"}];
          }

هنا :

<اقتباس فقرة>   

ومصدر البيانات في ArrayCollection.   الكائن ArrayCollection لا   تمثل أي التغييرات التي تجريها   مباشرة إلى مجموعة المصدر. دائما   استخدام ICollectionView أو IList   طرق لتعديل مجموعة.

     

وهذه الخاصية يمكن أن تستخدم ل   مصدر لربط البيانات. عندما   يتم تعديل الملكية، وترسل   الحدث listChanged.

وهكذا كنت على الارجح تغيير الخط إلى:

وmyList1= new ArrayCollection([{item:"foo"}, {item:"bar"}]);

نصائح أخرى

http://livedocs.adobe.com/flex /3/langref/mx/controls/TileList.html تحقق من API.

وتعيين خصائص columnWidth وrowHeight مثل هذا،

  <mx:TileList dataProvider="{myList1}"
                   direction="vertical"
                   width="800" columnWidth="800" rowHeight="25">

وهناك على الارجح المزيد من طريقة "المناسبة" للقيام بذلك، ولكن هذا يجب ان تحصل على انك بدأته.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top