Apache flex 从更改事件中获取旧文本?
我能找出文本字段的变化吗?我想比较一下旧文本和新文本。。。问题是,我在选项卡编辑器中有多个文本区域,所有文本区域都由一个eventListener监视。我想得到一个由下一个公式计算的值:Apache flex 从更改事件中获取旧文本?,apache-flex,actionscript-3,actionscript,flex3,Apache Flex,Actionscript 3,Actionscript,Flex3,我能找出文本字段的变化吗?我想比较一下旧文本和新文本。。。问题是,我在选项卡编辑器中有多个文本区域,所有文本区域都由一个eventListener监视。我想得到一个由下一个公式计算的值: globalChangeCount+=thisTextArea.currentCharacterCount-thisTextArea.oldtCharacterCount 其中,globalChangeCount是由任何文本区域中的所有更改修改的值 我正在通过事件变量搜索这些值,但无法通过seam查找textA
globalChangeCount+=thisTextArea.currentCharacterCount-thisTextArea.oldtCharacterCount
其中,globalChangeCount是由任何文本区域中的所有更改修改的值
我正在通过事件变量搜索这些值,但无法通过seam查找textArea的旧文本。您可以使用event.currentTarget获取对触发事件的textArea的引用,然后使用focusIn事件执行一个函数,用旧文本值填充变量。也许您应该将
TextArea
子类化,并创建一个oldText
字段变量,在通知所有外部侦听器后,您可以在内部更新该变量。这可能是您想要做的,也可能不是:
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();
}
}
}
我制作它是为了让您可以将其用作绑定源。您可以使用以下命令,而不是订阅每个文本区域上的事件:
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);
}
如何更新这个oldText变量,因为如果我用event.CHANGE捕捉到里面的事件,我将无法获得旧版本。我不想看KeyboardEvent.KEY_DOWN或类似内容,因为文本也可以在不按键盘的情况下插入(复制/粘贴)。我怎样才能在事件发生前立即处理事件(或某事)?(每次按下键并复制/粘贴后)我知道我可以通过event.currentTarget获得textArea的变量,但我没有得到它,焦点是什么。。。旧文本不是文本区域获得焦点之前的文本,而是更改之前的文本。如果focusIn对您来说还不够晚,我认为您必须同时监听按键(对于实际输入文本的按键,以及ctrl+c及其等效项)和单击(在通过上下文菜单复制的情况下)事件,让这些事件监听器指向同一个函数来实现您的逻辑。我没有使用标志或函数上方的那些内容,但这对我来说是一个解决方案。。。。我如何调用这个函数,或者它是否自动为我调用,唯一的问题是当我从类ex.event.currentTarget.staleText之外捕获更改事件时获取该staleText?请参阅上面的更新。我还不确定通知在这里是如何工作的。