2009-03-23 34 views
13

tôi phát triển với FlashDevelop3 R2 và Flex 3.3 SDK và có nhiều dịp mà tôi phải sử dụng thẻ nhúng siêu dữ liệu như vậy:AS3 [Sự kiện (tên = "", loại = "")], ý nghĩa là gì?

[Embed(source="path/to/file")] 
    private var Asset:Class; 

tôi hiểu được trên tất cả tốt và tốt, và tôi biết ơn nó tồn tại bởi vì tôi không thích mở IDE flash quá thường xuyên.

Khi tôi đi qua các tác giả khác lớp thời gian gần đây, tôi đã tìm thấy một thẻ siêu dữ liệu thú vị mà tôi không hiểu:

[Event(name="", type="")] 

Tôi chưa thấy một tình huống mà tôi yêu cầu này, và hơn nữa, tôi thực sự chỉ không hiểu nó là gì.

Cảm ơn trước sự giúp đỡ của bạn.

Brian Hodge
blog.hodgedev.comhodgedev.com

Trả lời

12

Chúng tôi sử dụng nó cho ràng buộc sự kiện tùy chỉnh các thành phần tùy chỉnh MXML của chúng tôi. Thẻ này cho phép bạn tham chiếu từ MXML. Xem documentation:

[Event(name="enableChanged", type="flash.events.Event")]

class ModalText extends TextArea { ... }

<MyComp:ModalText enableChanged="handleEnableChangeEvent(event);"/>

Trình biên dịch sẽ phàn nàn, tuy nhiên, nếu bạn cố gắng tham khảo một sự kiện trên thẻ mxml rằng không được khai báo với thẻ meta sự kiện.

+0

Thú vị, tôi đã tìm thấy điều này trong các dự án AS3 không bao gồm MXML, bạn có nghĩ đây là vì lớp này có thể được nhập vào và sử dụng trong dự án sử dụng MXML không? –

+0

Có, các thành phần tùy chỉnh thường được mã hóa bằng AS3 nguyên chất để tránh các vấn đề về hiệu suất. – dirkgently

20

Những tờ khai [Event(name, type)] này mô tả sự kiện nào mà một cá thể lớp có khả năng gửi đi.

Họ đang thực sự hữu ích cho mã hoàn thành - ví dụ khi bạn gõ: mySprite.addEventListener(, biên tập mã của bạn (Flex Builder hoặc FlashDevelop) sẽ hiển thị một danh sách đầy ý nghĩa của các sự kiện mà đối tượng này có thể cử.

Vì vậy, bạn có thể thêm các khai báo này vào mã của mình và hưởng lợi từ việc hoàn thành mã phong phú hơn.

Cũng lưu ý rằng thao tác này có các lớp Sự kiện tùy chỉnh (xem mẫu Lớp sự kiện mới của FlashDevelop).

package mycomp { 
    import flash.events.Event; 

    public class MyEvent extends Event { 
     public const SOME_EVENT:String = "someEvent"; 
     // required Event type declarations 
    } 
} 

package mycomp { 
    [Event(name="someEvent", type="mycomp.MyEvent")] 
    public class MyComp extends Sprite { 
    } 
} 

package myproject { 
    import mycomp.MyComp; 

    public class MyProject { 
      function MyProject() { 
       var mc:MyComp = new MyComp(); 
       mc.addEventLister(//completes: SOME_EVENT + Sprite events 
      } 
    } 
} 
+0

Chính xác câu trả lời tôi đang tìm kiếm! – Veehmot