2010-02-09 53 views
0

確定的人我真的需要你在這個超級大腦,我已經拔出我的所有頭髮,我只是想把毛巾扔在這個,好吧,我有一個itemrender組件,你可以看到下面問題綁定裏面itemRender

<?xml version="1.0" encoding="utf-8"?> 
<mx:HBox xmlns:mx="http://www.adobe.com/2006/mxml" width="100%" horizontalScrollPolicy="off" 
    creationComplete="hbox1_creationCompleteHandler(event)"> 
<mx:Script> 
    <![CDATA[ 
    import events.ColorsEvent; 

    import mx.binding.utils.BindingUtils; 
    import mx.binding.utils.ChangeWatcher; 
    import mx.events.ColorPickerEvent; 
    import mx.events.FlexEvent; 
    import mx.utils.ObjectProxy; 

    import utils.BindingUniform; 

    private var _op:ObjectProxy; 
    private var cw:ChangeWatcher; 

    public function get value():String 
    { 
    return data.color; 
    } 

    override public function set data(value:Object):void 
    { 
    super.data = value; 
    cp.selectedColor = data.color; 
    } 

    protected function cp_changeHandler(event:ColorPickerEvent):void 
    { 
    _op[data.id] = event.color; 
    } 

    protected function hbox1_creationCompleteHandler(event:FlexEvent):void 
    { 
    if(_op == null){ 
    _op = BindingUniform.op; 
    cw = BindingUtils.bindSetter(dispatchColorChange, _op, data.id); 
    } 
    } 

    protected function dispatchColorChange(color:uint):void 
    { 
    cp.selectedColor = color; 
    dispatchEvent(new ColorsEvent("colorChanged", color, data.id, true, true)); 
    } 

    ]]> 
</mx:Script> 
<mx:Text width="145"><mx:text>{data.value}</mx:text></mx:Text> 
<mx:ColorPicker id="cp" dataProvider="{parentDocument.colorsDP}" 
    valueCommit="{data.color = cp.selectedColor}" 
    change="cp_changeHandler(event)" editable="false"/> 
<mx:Label id="colorLb" text="{cp.selectedItem.label}"/> 
</mx:HBox> 

的想法是,當我改變顏色ColorPicker中的一個,則改變事件必須在我_OP objectProxy對象更改動態變量。

好吧,當我滾動的顏色仍然在各自的顏色拾取,這是確定的名單,我的問題出現在綁定,當itemRender creationComplete事件火災,我做一個bindsetter的變量,這樣我可以調度當事件物業改變。

爲什麼我需要綁定的原因是因爲用戶有時會加載以前保存的模型,我希望變量保持綁定,以便colorpicker能正確選擇顏色,希望有道理。

好吧,事情是第一個可見的行工作就好了,但是當我滾動列表,並嘗試更改colorpicker中的顏色變化,但我的綁定消失了,如果我滾動回到頂部第一個也沒有綁定不了,我真的不知道還有什麼要做,我只是跳了一些人做了類似的事情,或只是有解決辦法,請幫助我,如果可以的話,我真的需要它,我認爲我的大腦會爆炸,爲什麼在Flex中綁定非常困難?謝謝!!!

+0

希望我可以幫助你,但它是很難理解你的問題代替它。嘗試把它分解成更小的部分。 – 2010-02-09 07:33:21

回答

1

itemRenderer不應該到達自己以外的地方來拉入數據,特別是不設置值或參與綁定或事件。它只應該在傳遞給它的data上採取行動。它可以從data中讀取數值或在data上設置數值,然後可以將數值廣播到其他組件。

編程這種方式,使您的itemRenderer部件完全密封的黑色小盒子,將大大簡化開發和一般工作得更好,避免像內存泄漏難以查找和調試問題和懸掛項目渲染器的引用可以響應甚至在你認爲他們消失了很長時間之後。

1

我只查看了你的代碼,看看itemRenderer是否存在不好的做法,我有兩個建議。首先,正如Sam所說的,讓您的渲染器成爲一個獨立的組件,它不依賴於您的objectProxy對象。使用事件進行更改以進行與模型相關的更改。

其次,更重要的是,這條線是殺手:

cp.selectedColor = data.color;

與「value.color」

+0

嗯,好吧我會這樣做謝謝你的回覆,是的我同意兩個,我改變了我的設計,現在我能夠綁定,謝謝! – goseta 2010-02-19 02:15:22