2008-11-26 45 views
12

Theo như tôi hiểu, việc liên kết với một var trong ActionScript được thực hiện thông qua các sự kiện được tự động kích hoạt khi một biến được thay đổi. Tôi có một vài câu hỏi về điều này:Việc liên kết trong ActionScript hoạt động như thế nào?

  1. Điều gì sẽ xảy ra nếu lớp học không mở rộng EventDispatcher một cách rõ ràng? Có một số loại ma thuật xảy ra trong trình biên dịch mà về cơ bản khiến lớp này trở thành EventDispatcher không?
  2. Cách gắn kết với vars tĩnh hoạt động như thế nào? Có phải một số loại hàm addEventListener() tĩnh được thêm vào lớp không?
  3. Tôi đã nhận thấy rằng bạn có thể đặt [Bindable] trên vars tĩnh nhưng không phải là các chức năng tĩnh, tại sao điều này?

Edit:

Nhờ Christophe Herreman cho câu trả lời sáng tỏ mình. Tuy nhiên, tôi có một số phần tiếp theo từ các câu hỏi của tôi ở trên. Tôi tự hỏi liệu có ai đó có thể lấp đầy khoảng trống cho tôi không (tôi cố gắng đánh số các câu hỏi 4, 5, 6 nhưng chúng hiển thị 1, 2, 3 vì lý do nào đó!)

  1. Tôi đã thêm tùy chọn -keep vào trình biên dịch và xem mã ràng buộc được tạo ra. Bất cứ ai có thể giải thích làm thế nào mã này được áp dụng? Trình biên dịch dường như tạo ra một lớp được gọi là BindableProperty cho mỗi lớp, trong đó có getter và setter. Làm thế nào để điều này được xếp vào lớp tôi đã viết? Tính năng này trông giống như các lớp học một phần trong C# - đây có phải là chức năng biên dịch độc quyền đằng sau hậu trường hay là một thứ gì đó mà tôi có thể sử dụng?

  2. Lớp BindableProperty vẫn không triển khai rõ ràng EventDispatcher, lớp được tạo ra triển khai sự kiện gửi đi như thế nào?

  3. Trong câu hỏi 3, tôi đã hỏi về việc liên kết với các hàm tĩnh, nhưng tôi thực sự có nghĩa là các hàm getter và setter tĩnh. Điều này dường như không được phép.

Trả lời

14

liên kết thực sự hoạt động thông qua gửi sự kiện. Bạn có thể học được rất nhiều từ mã Actionscript được tạo ra bằng cách thêm cờ -keep vào các thiết lập trình biên dịch.

Tôi sẽ cố gắng trả lời câu hỏi của bạn.

  1. trình biên dịch sẽ nhận thẻ siêu dữ liệu [Bindable] và sẽ tạo trình lấy và đặt cho mỗi thuộc tính bạn đã đánh dấu là có thể ràng buộc. Bộ getter sẽ trả về giá trị của thuộc tính. Bộ setter sẽ kiểm tra nếu giá trị mới khác với giá trị ban đầu và sẽ gửi một sự kiện PropertyChange nếu nó có.

  2. tương tự như đối với các thuộc tính mẫu, về cơ bản, chỉ bây giờ một trình thu thập tĩnh và bộ đặt được tạo. Ngoài ra, một mx.binding.StaticPropertyWatcher được tạo ra để xem các thay đổi trong các thuộc tính tĩnh.

  3. khi liên kết với phương pháp tĩnh, bạn nhận được cảnh báo sau: "[Bindable] yêu cầu thông số tên sự kiện khi được áp dụng cho hàm không phải là trình khởi động hoặc bộ đặt." Mô tả khá nhiều nói lên tất cả. Vì bạn không có sự kiện "propertyChange" được kích hoạt riêng cho phương thức này, bạn phải tự mình gửi một tùy chỉnh. Đó là [Bindable (event = "customEvent")] và sau đó gửi sự kiện đó từ một nơi nào đó trong lớp của bạn.

+0

Cảm ơn Chris, đó là giải thích thực sự hữu ích. – aaaidan

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