2010-03-30 25 views
5

Tôi có hai ComboBox liên quan (lục địa và quốc gia). Khi các châu lục ComboBox thay đổi, tôi yêu cầu một XML từ một URL nhất định. Khi tôi nhận được XML mà tôi thay đổi DataProvider cho các nước ComboBox, như thế này:Flex 3.5.0; Cập nhật danh sách hiển thị ComboBox khi thay đổi dataprovider

public function displayCountryArray(items:XMLList):void 
     { 
      this.resellersCountryLoader.alpha = 0; 
      this.resellersCountry.dataProvider = items; 
      this.resellersCountry.dispatchEvent(new ListEvent(ListEvent.CHANGE)); 
     } 

tôi cử các ListEvent.CHANGE vì tôi sử dụng nó để thay đổi ComboBox khác vì vậy hãy bỏ qua điều đó (và dòng 1). Vì vậy, vấn đề của tôi là: Tôi chọn "ASIA" từ lục địa đầu tiên, sau đó combobox DATA được cập nhật (tôi có thể thấy rằng vì ITEM đầu tiên là một mục có nhãn '23 quốc gia '). Tôi bấm vào combo sau đó tôi có thể nhìn thấy các quốc gia.

NGAY BÂY GIỜ, tôi chọn "Châu Phi", mục đầu tiên được hiển thị, với ComboBox đang đóng, sau đó khi tôi nhấp vào, các quốc gia vẫn là những người từ châu Á. Dù sao, nếu tôi bấm vào một mục trong danh sách, sau đó danh sách cập nhật một cách chính xác, và cũng có, nó có thông tin chính xác (như tôi đã nói nó ảnh hưởng đến các ComboBox khác). SO vấn đề duy nhất là danh sách hiển thị không được cập nhật.

Trong chức năng này tôi đã cố gắng tiếp cận những

  • Chuyển đổi XMLList để XMLCollection và thậm chí ArrayCollection

  • Thêm this.resellersCountry.invalidateDisplayList();

  • Các sự kiện kích hoạt như DATA_CHANGE và UPDATE_COMPLETE Tôi biết chúng không có ý nghĩa nhiều, nhưng tôi hơi tuyệt vọng.

Xin lưu ý rằng khi tôi sử dụng SDK 3.0.0 điều này không xảy ra.

Xin lỗi nếu tôi ngu ngốc, nhưng sự kiện flex đang giết tôi.

Trả lời

11

Đặt trình quản lý dữ liệu của danh sách thả xuống của comboBox dường như khắc phục sự cố này.

this.resellersCountry.dataProvider = items; 
this.resellersCountry.dropdown.dataProvider = items; 
+0

xin lỗi, nhưng tôi đã thay đổi GUI và không thể kiểm tra giải pháp của bạn. Tôi sẽ thử ngay sau khi tôi có cơ hội và chấp nhận câu trả lời của bạn. Cảm ơn, một lần nữa. Đã kiểm tra –

+0

. nó hoạt động. –

+0

Làm việc cho tôi. – Konsumierer

1

this.resellersCountry.dropdown.dataProvider = items;

công trình (Flex SDK 3.5)

Hope lỗi này cố định trong 4,0

1

Ngoài Christophe's câu trả lời:

Khi bạn đang sử dụng dữ liệu ràng buộc trong ComboBox của bạn, bạn cần phải sử dụng BindingUtils để thiết lập các dataprovider dropdown's:

MXML:

<mx:ComboBox id="cb_fontFamily" 
     width="100%" 
     dataProvider="{ model.fontFamilies }" /> 

Tập lệnh:

private function init():void 
{ 
    BindingUtils.bindSetter(updateFontFamilies, model, "fontFamilies"); 
} 

private function updateFontFamilies(fontFamilies:ArrayCollection):void 
{ 
    if (cb_fontFamily != null) cb_fontFamily.dropdown.dataProvider = fontFamilies; 
} 

Nhờ Christophe đã đi đúng hướng.

0

workaround khác, được nêu trong một Adobe Community forum post, là để tránh tái gán một đối tượng khác nhau ArrayCollection vào ComboBox, và thay vào đó tái sử dụng (và việc sắp xếp lại) một bản gốc thay vì:

items.removeAll(); 
for each (var item:* in newItems) 
{ 
    items.addItem(item); 
} 
Các vấn đề liên quan