2012-04-05 63 views
1

我有一些由某些組件共享的XML對象。如果該屬性更改,是否可以將BindSetter設置爲特定標記並調用函數?關於XML對象標籤的Flex Bindsetter?

我試過了,但BindSetter調用似乎不接受XML標籤名稱。

當簡單地使用[綁定]和MXML中使用的標籤名稱(如標籤文本=「{} myXMLObject.tagName」)這工作得很好,所以我想這在純AS工作,以及,我只是還沒有想出如何。

任何提示?

根據評論/回答,這裏是我的代碼/用法的一個非常基本的例子。

Flex應用程序中的兩個組件,它們都繼承相同的XML對象;

[Bindable] public var sharedData:XML; 

然後在每個組件的creationComplete處理程序中,我調用BindSetter;

BindingUtils.bindSetter(sharedDataChange, sharedData, "tagName"); 

sharedDataChange沒有在這一點上做的任何事情,只是跟蹤該函數被調用。

我得到了一個標籤,顯示sharedData.tagName的值,一個textInput和一個設置sharedData.tagName = textInput.text的按鈕。 使用MXML綁定({label.text = sharedData.tagName})這工作正常。但是,正如我所說,BindSetter函數似乎沒有檢測到更改。

+0

也許別人可以直接解釋如何做到這一點,但你可能想看看只是做一個-keep來獲得生成的動作,然後使用某種差異查看器來查看兩個簡單的Flex應用程序與唯一的區別是你正在尋找的xml類型綁定之一。你也應該發佈一些代碼。 – shaunhusain 2012-04-05 06:29:46

+0

你可以發佈,你是如何爲'myXMLObject.tagName'編寫'bindSetter'? – Engineer 2012-04-05 06:35:46

回答

0

如果label text="{myXMLObject.tagName}"爲你工作,然後

BindingUtils.bindSetter(function(value:*):void{ 
    //Do something 
}, this, ["myXMLObject","tagName"]); 

應該工作一樣好,但myXMLObject必須是 'public'。

BindingUtils與使用XML或其他對象無關。如果對象指定爲[Bindable],那麼BindingUtils將正確使用它。

UPDATE:

BindingUtils.bindSetter(sharedDataChange, sharedData, "tagName"); 

BindingUtils.bindSetter(sharedDataChange, this, ["sharedData", "tagName"]); 

如果你會寫什麼 'shareData = ...',首先表達的setter之間有很大的差異不會被調用,但對於第二個,它會的。

+0

這就是我的想法,但不幸的是BindSetter函數沒有得到調度。我的代碼基本上與你的代碼完全相同,但我將它添加到我的拳頭帖子中。 – AlBirdie 2012-04-05 08:21:54

+0

@Al_Birdy檢查我的更新。 – Engineer 2012-04-05 08:57:58

+0

檢查它,將其應用於我的代碼,不起作用。;)使用一般的AS對象(不是XML),BindSetter對我來說總是很好用。這只是這個血腥的XML,我無法環繞我的頭。 – AlBirdie 2012-04-05 09:39:31