2009-04-29 33 views
7

OK Tôi có một ComboBox, dataProvider là một mảng các đối tượng có thuộc tính nhãn cung cấp cho ComboBox danh sách các tùy chọn.Flex: Có cách nào để ràng buộc selectedBoxem của ComboBox thành một biến không?

Có cách nào tôi có thể có một biến như mySelectedItem, và ràng buộc selectedBoxem ComboBox của nó để nó để nếu nó thay đổi, selectedBoxem ComboBox sẽ thay đổi bất cứ điều gì nó được?

Tôi hy vọng điều này có ý nghĩa.

Cảm ơn!

Trả lời

16

Có, thuộc tínhItem được chọn của ComboBox là có thể ràng buộc.

Nó sẽ đi một cái gì đó như thế này:

<mx:ComboBox selectedItem="{mySelectedItem}"> 
</mx:ComboBox> 

Trong AS của bạn:

[Bindable] 
var mySelectedItem:Object; 

Changes để mySelectedItem nên hiển thị trong ComboBox. Bạn có thể gặp lỗi nếu mục được tham chiếu bởi mySelectedItem không tồn tại trong dataProvider của ComboBox.

2

Sử dụng trình xử lý sự kiện cho sự kiện Change và thực hiện việc xử lý của bạn ở đó.

// update a label item's text with that of the Combobox's selectedItem 
private function changeEvt(event:Event):void { 
    label.text =event.currentTarget.selectedItem.label + " " + 
} 
9

Trên bề mặt, nó đơn giản như:

<mx:ComboBox id="myComboBox" 
    dataProvider="{myDataProvider}" 
    selectedItem="{defaultItem}"/> 

Khi bạn thiết lập defaultItem (chắc chắn rằng nó là [Bindable]) đến một trong các mục trong các nhà cung cấp dữ liệu, nó sẽ cập nhật sự kiểm soát.

Nhưng có vấn đề với cách tiếp cận này. Trừ khi currentDefaultItem luôn thay đổi SAU myDataProvider, ràng buộc với dataProvider có thể hoàn tác lựa chọn, hoàn nguyên về mặc định (mục đầu tiên trong danh sách).

Một cách xung quanh đây là bắt buộc selectedItem được phục hồi sau dataProvider, bằng cách bao gồm dataProvider trong cuộc gọi cung cấp selectedItem.

<mx:ComboBox id="myComboBox" 
    dataProvider="{myDataProvider}" 
    selectedItem="{getSelectedItem(myComboBox.dataProvider, defaultItem)}"/> 

Điều này đảm bảo được chọnMục này sẽ được phục hồi khi hiện tạiDefaultItem thay đổi hoặc sau khi DataProvider thay đổi. Tôi muốn được quan tâm đến các giải pháp khác bản thân mình.

1

Tôi biết đây là cách được mô tả trong tài liệu. Như trong một thay đổi đối với SelectedItem sẽ kích hoạt trình nghe thay đổi. Tuy nhiên đối với tôi, điều này không xảy ra. Bất kỳ ai khác cũng gặp phải hành vi tương tự?

+0

Tôi đã nhận thấy nó với SelectedIndex. – Panzercrisis

1

hay, bạn có thể làm một cái gì đó như thế này nếu bạn không nhớ mở rộng ComboBox; Đây là mã giả (xin lỗi, xác định các kết quả phù hợp tùy thuộc vào loại đối tượng) - nhưng bạn có ý tưởng ...

public class IndexRetainingComboBox extends ComboBox 
{ 
    public function IndexRetainingComboBox() 
    { 
     super(); 
    } 

    override public function set dataProvider(value:Object):void 
    { 
     var originalSelection:Object = this.selectedItem; 
     super.dataProvider = value; 
     var newIdx:uint = [find originalSelection idx in combobox or return 0 ] 
     this.selectedIndex = newIdx; 
    } 
} 
Các vấn đề liên quan