2010-06-06 36 views
5

Tôi cần phải tự động ràng buộc các thuộc tính của các thành phần được tạo ra trong thời gian chạy. Trong trường hợp cụ thể này, giả sử tôi cần sử dụng bindProperty.Không hiểu các khái niệm cơ bản về DataBinding động (bindPropety) Trong Flex

Tôi không hiểu tại sao thử nghiệm đơn giản sau đây bị lỗi (xem mã). Khi tôi nhấp vào nút, văn bản nhãn không thay đổi.

Tôi nhận ra rằng có những cách đơn giản hơn để đi về ví dụ cụ thể này bằng cách sử dụng ràng buộc phi động lực truyền thống, nhưng tôi cần hiểu nó về mặt sử dụng bindProperty.

Ai đó có thể giúp tôi hiểu những gì tôi đang bỏ lỡ không?

<?xml version="1.0" encoding="utf-8"?> 
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:ns1="Tools.*" minWidth="684" minHeight="484" xmlns:ns2="*" creationComplete="Init();"> 
    <mx:Script> 
    <![CDATA[ 
     import mx.collections.ArrayCollection; 
     import mx.binding.utils.*; 
     public var Available:ArrayCollection=new ArrayCollection(); 

     public function get Value():String { 
     return (Available.getItemAt(0).toString()); 
     } 

     public function Init():void { 
     Available.addItemAt('Before', 0); 
     BindingUtils.bindProperty(Lab, 'text', this, 'Value'); 
     } 

     public function Test():void { 
     Available.setItemAt('After', 0); 
     } 
    ]]> 
    </mx:Script> 
    <mx:Label x="142" y="51" id="Lab"/> 
    <mx:Button x="142" y="157" label="Button" click="Test();"/> 
</mx:WindowedApplication> 

Xin cảm ơn trước.

Trả lời

3

Như đã đề cập bởi Glenn, bạn cần thêm thẻ [Bindable] vào Value.

Ngoài ra, bạn chưa xác định người đặt cho thuộc tính. Ràng buộc dữ liệu được gọi chỉ khi setter tương ứng được gọi. Dòng chảy là một cái gì đó như: bạn gọi setter - Flex cập nhật dữ liệu bằng cách gọi getter.

[Bindable] 
    public function get value():String { 
    return (Available.getItemAt(0).toString()); 
    } 

    public function set value(v:String):void { 
    Available.setItemAt(v, 0); 
    } 

    public function init():void { 
    Available.addItemAt('Before', 0); 
    BindingUtils.bindProperty(Lab, 'text', this, 'Value'); 
    } 

    public function iest():void { 
    value = "After"; 
    } 

Lưu ý rằng tôi đã thay đổi tên của các chức năng và đặc tính thành chữ thường theo quy ước thông thường. InitialCaps chỉ được sử dụng cho tên lớp.

+0

Có, có vẻ như là do tôi thiếu phương thức đã đặt. Tôi không nhận ra điều đó là bắt buộc. – Joshua

1

Tôi không bao giờ sử dụng BindingUtils, nhưng dự đoán đầu tiên của tôi là bạn đang thiếu thẻ [Bindable] trên "Value".

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