【发布时间】:2011-11-17 09:11:20
【问题描述】:
我有一个非常简单的自定义组件,由两个 Labels 组成:_left 和 _right。
它应该代表游戏中的几种分数:1.2.3.4.5.6
如果最后一个数字(上例中的“6”)刚刚更改(在当前游戏回合中),则应为粗体,否则所有数字应相同。
最后一个数字也应该是红色或绿色(取决于它是“坏”还是“好”的分数)。
这是我的 ScoreLabel.mxml 的源代码:
<?xml version="1.0" encoding="utf-8"?>
<s:HGroup
xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
gap="0">
<fx:Script>
<![CDATA[
public function setText(str:String, changed:Boolean=false):void {
if (!changed) {
_right.text = '';
_left.text = str;
return;
}
var array:Array = str.split('.');
_right.text = array.pop();
_left.text = array.join('.') + '.';
}
public function setColor(n:uint):void {
_right.setStyle('color', n);
trace('setColor: ' + n);
}
]]>
</fx:Script>
<s:Label id="_left" width="100%" textAlign="right"/>
<s:Label id="_right" width="25" fontWeight="bold" color="#006600"/>
</s:HGroup>
我的问题是:当我调用 myLabel.setColor(0xFF0000); 时,文本不会变为红色,而是保持默认的绿色 - 即使我可以在调试器中看到跟踪.
请给点意见,为什么颜色不改变?
我也知道,我可以将上述组件更改为:
private var _color:uint;
<s:Label id="_right" width="25" fontWeight="bold" color="{_color}"/>
并更改该 _color 成员,但我不希望再引入一个数据绑定,因为我的应用程序中将包含许多 ScoreLabel:
(如您在上面看到的,所有数字都是绿色的 - 尽管 setColor(0xFF0000) 已被调用 3 次)。
【问题讨论】:
-
我测试了你的代码,它对我有用......也许你应该给我们更多的细节。
-
感谢您的尝试,我很抱歉:我的主要源代码中有一个错字 - 来自于我的业余项目的深夜工作。
标签: apache-flex label flex4 flex4.5 flex-spark