gpt4 book ai didi

apache-flex - Flex 中的某些 [Bindable] 属性有效,有些则无效

转载 作者:行者123 更新时间:2023-12-02 07:55:25 27 4
gpt4 key购买 nike

问题已解决,见下文

问题

我在 Flex Builder 3 中工作,我有两个 ActionScript 3 类(ABCXYZ)和一个 Flex MXML 项目(main.mxml)。我有一个 XYZ 的实例作为 ABC 的属性,我希望 XYZ 的属性可见([Bindable] ) 在文本控件中的 Flex 项目中。

不幸的是,只有 prop3prop4 在更改时更新。我已经进入调试器以确保 prop1prop2 发生变化,但它们没有在文本控件中更新。

代码如下:

ABC.as

[Bindable]
public class ABC extends UIComponent {
/* Other properties */

public var xyz:XYZ = new XYZ();

/* Methods that update xyz */
}

XYZ.as

[Bindable]
public class XYZ extends Object {
private var _prop1:uint = 0;
private var _prop2:uint = 0;
private var _prop3:uint = 0;
private var _prop4:uint = 1;

public function get prop1():uint {
return _prop1;
}

public function set prop1(value:uint):void {
_prop1 = value;
}

/* getters and setters for prop2, prop3, and prop4 */
}

主.mxml

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:com="com.*" />
<com:ABC id="abc" />
<mx:Text text="{abc.xyz.prop1}" />
<mx:Text text="{abc.xyz.prop2}" />
<mx:Text text="{abc.xyz.prop3}" />
<mx:Text text="{abc.xyz.prop4}" />
</mx:Application>

回答

从我发布的小代码片段中看不出来,但在 XYZ 中,我正在使用它们的 setter 更新 _prop3_prop4。相反,我通过它们的私有(private)变量而不是它们的 setter 更新了 _prop1_prop2。因此,属性 1 和 2 没有调度更新事件。

最佳答案

看起来你的 setter/getter 正在返回空隙。根据您的字段类型,它们应该返回单位。

否则您的代码应该可以正常工作。我已经组装并测试了一个带有设置所有四个值的计时器的工作版本,因此您可以看到所有四个更新:

主.mxml:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:local="*" creationComplete="onCreationComplete()">

<mx:Script>
<![CDATA[

private function onCreationComplete():void
{
var t:Timer = new Timer(1000);
t.addEventListener(TimerEvent.TIMER, t_tick);
t.start();
}

private function t_tick(event:TimerEvent):void
{
var i:uint = Timer(event.currentTarget).currentCount;

abc.xyz.prop1 = i;
abc.xyz.prop2 = i;
abc.xyz.prop3 = i;
abc.xyz.prop4 = i;
}

]]>
</mx:Script>

<local:ABC id="abc" />

<mx:VBox>
<mx:Text text="{abc.xyz.prop1}" />
<mx:Text text="{abc.xyz.prop2}" />
<mx:Text text="{abc.xyz.prop3}" />
<mx:Text text="{abc.xyz.prop4}" />
</mx:VBox>

</mx:Application>

ABC.as

package
{
import mx.core.UIComponent;

[Bindable]
public class ABC extends UIComponent
{
public var xyz:XYZ = new XYZ();

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

XYZ.as

package
{
[Bindable]
public class XYZ extends Object
{
private var _prop1:uint = 0;
private var _prop2:uint = 0;
private var _prop3:uint = 0;
private var _prop4:uint = 1;

public function XYZ()
{
super();
}

public function get prop1():uint {
return _prop1;
}

public function set prop1(value:uint):void {
_prop1 = value;
}

public function get prop2():uint {
return _prop2;
}

public function set prop2(value:uint):void {
_prop2 = value;
}

public function get prop3():uint {
return _prop3;
}

public function set prop3(value:uint):void {
_prop3 = value;
}

public function get prop4():uint {
return _prop4;
}

public function set prop4(value:uint):void {
_prop4 = value;
}
}
}

看看那些,插上电源,您应该会看到它们全部组合在一起。如果您有任何问题,请回帖。干杯。

关于apache-flex - Flex 中的某些 [Bindable] 属性有效,有些则无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1106758/

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