2009-03-23 36 views
5

tôi có một đối tượng đại diện cho một bảng cơ sở dữ liệu. Tôi muốn lặp qua đối tượng này và in ra từng giá trị. Những gì tôi có thể sử dụng để làm điều này?flex 3 lặp qua các giá trị đối tượng

tôi muốn làm điều này trong mxml của tôi không ActionScript

cho từng đối tượng thuộc tính tôi muốn tạo ra một trường imput

Trả lời

11

Tra cứu tài liệu về vòng lặp Flex 3. Nếu bạn làm thế, bạn sẽ tìm thấy điều này:

for..in

Các for..in lặp lặp qua các thuộc tính của một đối tượng, hoặc các yếu tố của một mảng. Ví dụ, bạn có thể sử dụng một vòng lặp for..in để lặp qua các thuộc tính của một đối tượng chung chung (các thuộc tính đối tượng không được giữ trong bất kỳ thứ tự cụ thể, vì vậy tính có thể xuất hiện theo một thứ tự dường như ngẫu nhiên):

var myObj:Object = {x:20, y:30}; 
for (var i:String in myObj) 
{ 
    trace(i + ": " + myObj[i]); 
} 
// output: 
// x: 20 
// y: 30 

Thay vì cố gắng tạo trường nhập cho từng đối tượng, tôi khuyên bạn nên xem DataGrid và tùy chỉnh ItemEditors.

+2

Như Kemenaran chỉ dưới đây, nếu bạn muốn để lặp qua các thuộc tính lớp, các giải pháp kinh điển trên không hoạt động. Cấp, lặp lại thuộc tính lớp không xác định sẽ hữu ích khi gỡ lỗi. – Sint

1

Bạn có thể viết nó như ActionScript nhưng bao gồm nó bên trong các tập tin mxml với thẻ script :

<mx:Script> 
    <![CDATA[ 
     public function LoopAndPrint() : void 
     { 
      //your code here 
     } 
    ]]> 
</mx:Script> 
2

Sự cố với "cho ... trong" là nó chỉ lặp lại trên thuộc tính động. Tức là, nếu đối tượng của bạn được định nghĩa là một Lớp (và không động), "for..in" sẽ không đưa ra bất cứ điều gì.

Các tài liệu ActionScript đề nghị sử dụng describeType() đối với tài sản cố định, nhưng có vẻ quá phức tạp đối với nhiệm vụ đơn giản này ...

4

Tôi đồng ý rằng câu trả lời này là không hữu ích. Nó chỉ hoạt động với các đối tượng chung, không phải đối tượng được khai báo là .

Tuy nhiên, đây là một số mã nên/có thể hoạt động bằng cách sử dụng descriptionType như được đề xuất ở trên. (Và tôi không nghĩ nó quá phức tạp). Hãy nhận biết rằng thuộc tính chỉ công cộng/phương pháp, vv được tiếp xúc:

var ct:CustomObject = new CustomObject(); 
var xml:XML = describeType(ct); 
for each(var accessor in xml..accessor) { 
    var name:String = [email protected]; 
    var type.String = [email protected]; 
    trace(ct[name]); 
} 
+0

Lưu ý rằng ví dụ này chỉ bao gồm * accessors * - các thuộc tính thực sự được xác định bằng getters và setters. Người ta sẽ cần phải sửa đổi nó một chút nếu một người quan tâm đến biến, hằng số hoặc phương pháp. Xem [tài liệu của descriptionType] (http: //help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/utils/package.html#describeType \ (\)) để biết thêm thông tin cụ thể. –

Các vấn đề liên quan