2009-08-10 30 views
12

Tôi muốn truy cập động một loạt các đối tượng trong mxml của mình. Tôi có thể xây dựng tên/id của họ. Trong Javascript tôi có thể làm getElementById(ID) để có được đối tượng. Tôi làm cách nào để thực hiện điều này trong Actionscript?getElementById tương đương trong Actionscript?

Tôi thực sự không thể làm getChildByName vì nó quá cồng kềnh: Tôi có quyền truy cập vào đối tượng A, có con B, có con C, có con D, E & F (tên của chúng có liên quan đến tên A). Tôi muốn lấy D, E & F. Đối với getChildByName, có vẻ như tôi phải dùng A để lấy B, rồi lấy C, rồi lấy D, E & F. Và nếu thêm một phụ huynh mới vào B (thay đổi thứ bậc mxml), sau đó mã sẽ phá vỡ ... Và tôi thực sự không muốn làm điều đó.

Bất cứ lời khuyên? Thx!

Cập nhật: Những gì tôi hỏi là, làm cách nào để truy cập đối tượng D được đặt tên và/hoặc id của nó, cả hai đều là chuỗi.

Trả lời

19

Kể từ khi các em thực sự thích "tài sản" của tài liệu, bạn sẽ có thể làm điều gì đó như thế này:

var elem: Type_of_E = này [ "constructed_id_of_E" ];

Nếu bạn đang ở trong một tài liệu phụ của tài liệu, chỉ cần sử dụng parentDocument ["construct_id_of_E"] để lấy phần tử.

+0

Cảm ơn! Chính xác những gì tôi đang tìm kiếm! – sc45

+0

@Cristian Ivascu tốt trên IMC :) –

0

Nếu bạn sử dụng MXML, bạn phải sử dụng flex. Nếu bạn đang sử dụng Flex thì bạn có thể chỉ định các mục của bạn.

Ví dụ:

<mx:Button 
     id = "myButton" 
     label = "OK" 
     click = "{myLabel.text = 'Button Pressed!'}"/> 

<mx:Label 
     id = "myLabel" 
     text = "Push the button!"/> 
+0

Lưu ý: ở trên là tương đương với nói: var myButton: Button = new Button(); Khi bạn cung cấp cho một thành phần mxml một id, bạn đang thực sự tạo ra một biến actioncript –

2

Thực ra, khi bạn gán cho họ ID, chúng sẽ trở thành biến thành viên công khai của phần tử đã cho. Vì vậy, ví dụ nếu bạn có

<mx:Canvas><mx:Label id="myLabel" /></mx:Canvas> 

Bạn có thể truy cập nó bằng nó id như một tên biến:

myLabel.text = "Hello world!"; 

Hãy cho tôi biết nếu bạn cần làm rõ hơn. Nếu đây không phải là những gì bạn yêu cầu, hãy bình luận và tôi sẽ lấy thêm một chút nữa.

Kính trọng, Chris

Cập nhật: Tất cả các thành phần mxml có thể truy cập theo cách này, bất kể có bao nhiêu cha mẹ họ có

1

Điều này làm việc với Flex 4?

Tôi đã một lưới trống thực hiện trong MXML, sau đó trong actionscript tôi thêm theo thứ tự này:

  • một gridrow (bên trong lưới) (id = "myGrid")
  • một gridItem (bên trong gridRow)
  • một combobox (bên trong gridItem) với id được tạo động (như "cmb" + i trong đó i là số nguyên).

Tôi đã thử ["cmb" +0], myGrid ["cmb" +0], parentDocument ["cmb" +0] và mỗi lần tôi nhận được "ReferenceError: Error # 1069: Không tìm thấy thuộc tính cmb0 trên adminUsers và không có giá trị mặc định " hoặc" ReferenceError: Lỗi # 1069: Không tìm thấy thuộc tính cmb0 trên mx.containers.Grid và không có giá trị mặc định "

Lưu ý:" adminUsers "là tên của ứng dụng của tôi

Chỉnh sửa: nếu nó có thể giúp ai đó, tôi đã giải quyết được vấn đề của mình theo một cách khác. Bây giờ tôi đang làm lưới của tôi với một repeater

<mx:Grid id="myGrid"> 
       <mx:Repeater id="repeater" dataProvider="{lst1}"> 
        <mx:GridRow> 
         <mx:GridItem><mx:Label text="{repeater.currentItem.name}" /></mx:GridItem> 
         <mx:GridItem><mx:ComboBox id="cmb" dataProvider="{lst2}" labelField="comment" /></mx:GridItem> 
        </mx:GridRow> 
       </mx:Repeater> 
      </mx:Grid> 

Bây giờ tôi có thể truy cập vào combo của tôi trong một vòng lặp với một cái gì đó như:

var combo:ComboBox = cmb[i] as ComboBox; 

:)

1

Bạn có thể sử dụng getChildByName("childname")