我有一个这样的课。属性“isPag”基于提交的“ecboardid”,我发现当更改ecboardid时,UI控件似乎无法检测到“isPag”也被更改。那么,如何制作像这样的属性可绑定?
[Bindable]
public class Encoder extends EventDispatcher
{
public var ecboardid : String;
/*-.........................................Methods..........................................*/
public function copyFrom(newEncoder:Encoder):void
{
ecboardid = newEncoder.ecboardid;
this.dispatchEvent(new Event('isPagChanged'));
}
[Bindable (event="isPagChanged")]
public function get isPag():Boolean
{
if(this.ecboardid != null)
{
if(this.ecboardid.search('xxx') != -1)
{
return false;
}
return true;
}
else
{
return false;
}
}
}
修改
如果我将属性更改为静态函数,
[Bindable]
public class Encoder extends EventDispatcher
{
public var ecboardid : String;
/*-.........................................Methods..........................................*/
public function copyFrom(newEncoder:Encoder):void
{
ecboardid = newEncoder.ecboardid;
this.dispatchEvent(new Event('isPagChanged'));
}
public static function isPag(String ecboardid ):Boolean
{
if(ecboardid != null)
{
if(ecboardid.search('xxx') != -1)
{
return false;
}
return true;
}
else
{
return false;
}
}
}
将像这样绑定:
visible = {Encoder.isPag(encoder.ecboardid)}
工作?当encoder.ecboardid改变时,会发生明显的变化吗?
答案 0 :(得分:0)
我不相信您可以将只读属性设置为Bindable,因为Flex使用对setter方法的调用来发出更改事件。在有关绑定对象属性的部分中查看here。
答案 1 :(得分:0)
你需要一个setter和一个getter。
此外,您将类标记为可绑定,如果您未指定事件名称,则该方法上的[Bindable]将是多余的。
通常编译器抱怨你是否只有一个getter而没有setter并尝试标记它[Bindable]
这样的代码:
visible = {Encoder.isPag(encoder.ecboardid)}
不具备约束力。 {var}表示法用于MXML。并且isPag不是静态的,因此您不能将其称为类属性。您需要一个Encoder类的实例才能合法。
答案 2 :(得分:0)
这是一个简单的更改 - 只需创建getter / setter并在setter中更改事件(更改值后),如下所示:
private var _ecboardid : String;
public function get ecboardid():String
{
return _ecboardid;
}
public function set ecboardid(value:String):void
{
_ecboardid = value;
this.dispatchEvent(new Event('isPagChanged'));
}