gpt4 book ai didi

apache-flex - Flex textarea 控件未正确更新

转载 作者:行者123 更新时间:2023-12-04 03:29:28 25 4
gpt4 key购买 nike

我正在编写一个涉及非常频繁地修改文本区域的 flex 应用程序。我遇到过文本区域有时不显示我的修改的问题。

以下 ActionScript 代码说明了我的问题:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" minWidth="955" minHeight="600">
<mx:TextArea x="82" y="36" width="354" height="291" id="textArea" creationComplete="initApp()"/>

<mx:Script>
<![CDATA[
private var testSentence:String = "The big brown fox jumps over the lazy dog.";

private var testCounter:int = 0;

private function initApp():void {
var timer:Timer = new Timer(10);
timer.addEventListener(TimerEvent.TIMER, playSentence);
timer.start();
}

private function playSentence(event:TimerEvent):void {
textArea.editable = false;

if (testCounter == testSentence.length) {
testCounter = 0;
textArea.text += "\n";
}
else {
textArea.text += testSentence.charAt(testCounter++);
}

textArea.editable = true;
}
]]>
</mx:Script>
</mx:Application>

当您在 flex 项目中运行上述代码时,它应该逐个字符地重复打印句子“The big brown fox jumps over the lazy dog.”。但是,如果您同时在文本区域中输入内容,您会注意到计时器打印的文本是扭曲的。

我很好奇为什么会这样。 flex 的单线程特性和在我进行修改时禁用文本区域的用户输入应该可以防止这种情况发生,但由于某种原因,这似乎不起作用。

我还必须注意,当以较大的间隔(大约 100 毫秒)运行计时器时,它似乎工作得很好,所以我很想认为这是 flex 框架内部的某种同步问题。

关于可能导致问题的任何想法?

最佳答案

我的儿子在长牙期间经历了一段艰难的时期,所以我醒了。而且,我不太确定我是怎么遇到这个随机问题/答案的,因为我很少使用 stackoverflow……但是……

您不应该因为文本区域而将帧率提高 4 倍!我们谈论的是系统资源,更不用说您可以利用的非常优雅的 flex 框架:

这是一个非常快速、符合 flex-sdk 且令人满意的修复方法:

创建一个扩展 TextArea 的组件并添加以下属性并覆盖(如果这实际上是您想要做的):

private var _tackOnText : String = "";
private var _tackOnTextChanged : Boolean = false;
public function set tackOnText(value:String):void
{
_tackOnText = value;
_tackOnTextChanged = true;
invalidateProperties();
}

public function get tackOnText():String
{
return _tackOnText;
}


override protected function commitProperties():void
{
super.commitProperties();

if(_tackOnTextChanged) {
this.textField.text += _tackOnText;
_tackOnText = "";
_tackOnTextChanged = false;
}

}

然后更改您的 playSentence 来执行此操作:

if (testCounter == testSentence.length)  {
testCounter = 0;
textArea.tackOnText += "\n";
}
else {
textArea.tackOnText += testSentence.charAt(testCounter++);
}

这是对一个半常见问题的修复,该问题应该允许您不将 frameRate 增加 4 倍以使您的应用正常运行,并且您将更好地使用 flex sdk。

我的 2p。

祝你好运,杰里米

关于apache-flex - Flex textarea 控件未正确更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2669835/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com