2010-05-25 41 views
0

我能以某種方式找出文本字段中的變化嗎?我想將舊文本與新文本進行比較......問題是,我在一個製表符編輯器中有多個textAreas,並且所有textAreas都由一個eventListener監視。我想在接下來的公式計算出的值:從更改事件中獲取舊文本?

globalChangeCount += thisTextArea.currentCharacterCount - thisTextArea.oldtCharacterCount

其中globalChangeCount是在任何文字區域的所有更改修正的數值。

我正在通過事件變量搜索這些值,但無法找到textArea的舊文本。

回答

2

這可能是也可能不是你希望做什麼:

package 
{ 
    import mx.controls.TextArea; 


    public class CountingTextArea extends TextArea 
    { 

     public var staleText : String = ""; 

     [Bindable("textChanged")] 
     [NonCommittingChangeEvent("change")] 
     public function get charDiff() : int 
     { 
      var diff : int = staleText.length - text.length; 
      staleText = text; 
      return diff; 
     } 

     public function CountingTextArea() 
     { 
      super(); 
     } 
    } 
} 

我做到了,這樣就可以使用它作爲綁定源。相反,訂閱對每個TextArea的事件,你可以使用:

function addWatchers():void 
{ 
    ChangeWatcher.watch(countingTextArea1, ["charDiff"], charDiffChangeHandler); 
    ... 
    ChangeWatcher.watch(countingTextArea5, ["charDiff"], charDiffChangeHandler); 
} 

與事件處理程序過於地方:

function charDiffChangeHandler(event : PropertyChangeEvent) : void 
{ 
    trace(event.currentTarget.charDiff); 
    // or 
    trace(event.newValue); 
} 
+0

我沒有使用標誌或功能上面的那些東西,但它接縫是我的解決方案....我如何調用此功能,或自動執行爲我做這件事,唯一的辦法就是當我從課外ex趕上變化事件時,得到那個staleText。 event.currentTarget.staleText? – Biroka 2010-05-26 12:50:10

+0

見上面更新。我不確定通知如何在這裏工作。 – jooks 2010-05-26 13:13:39

0

您可以使用event.currentTarget獲取引發該事件的TextArea的引用,並使用focusIn事件執行函數以使用舊文本值填充變量。

+0

我知道我可以通過event.currentTarget得到textarea的的變數,但我沒有得到它,關注點是什麼...在舊文本不是textArea獲得焦點之前的文本,而是在更改之前的文本。 – Biroka 2010-05-26 06:14:41

+0

如果focusIn對你來說不夠晚,我認爲你必須聽取keyDown(對於實際輸入文本的按鍵,以及ctrl + c及其等價物)並單擊(在通過上下文菜單複製的情況下)事件,以及讓這些事件監聽器指向相同的功能來實現您的邏輯。 – houser2112 2010-05-26 11:40:18

0

也許你應該繼承TextArea的子類,並創建一個oldText字段變量,在所有外部偵聽器收到通知後進行內部更新。

+0

如何更新這個oldText變量,因爲如果我用Event.CHANGE捕捉到事件,我不會得到舊的變量。我不想看KeyboardEvent.KEY_DOWN或類似的東西,因爲文本可以插入而不用按鍵(複製/粘貼)。 Event.CHANGE之前,我如何介紹事件(或其他事物)? (在每次keydown和複製/粘貼後) – Biroka 2010-05-26 06:10:44