1

我有一个由某些组件共享的 XML 对象。是否可以将 BindSetter 设置为特定标签并在该属性更改时调用函数?

我已经尝试过了,但 BindSetter 调用似乎不接受 XML 标记名称。

当简单地使用 [Bindable] 并使用 MXML 中的标签名称(即标签文本 =“{myXMLObject.tagName}”)时,这工作正常,所以我认为这也必须在纯 AS 中工作,我只是还没想到出如何。

有什么提示吗?

根据评论/答案,这是我的代码/用法的一个非常基本的示例。

Flex 应用程序中的两个组件都继承同一个 XML 对象;

[Bindable] public var sharedData:XML;

然后在每个组件的 creationComplete 处理程序中,我调用BindSetter;

BindingUtils.bindSetter(sharedDataChange, sharedData, "tagName");

sharedDataChange此时不做任何事情,只是跟踪该函数已被调用。

然后,我得到了一个显示 的值的标签sharedData.tagName、一个 textInput 和一个设置 的按钮sharedData.tagName = textInput.text。使用 MXML 绑定 ( {label.text = sharedData.tagName}) 可以正常工作。但正如我所说,BindSetter 函数似乎没有检测到这些变化。

4

1 回答 1

0

如果label text="{myXMLObject.tagName}"对你有用,那么

 BindingUtils.bindSetter(function(value:*):void{
     //Do something
 }, this, ["myXMLObject","tagName"]);  

应该也可以,但myXMLObject必须是' public'。

BindingUtils无论是使用 XML 还是使用其他对象都没有区别。如果 object 指定为[Bindable],则将BindingUtils正确使用它。

更新:有很大的区别

BindingUtils.bindSetter(sharedDataChange, sharedData, "tagName"); 

BindingUtils.bindSetter(sharedDataChange, this, ["sharedData", "tagName"]);

如果你要写一些 ' shareData = ...' ,第setter一个表达式的将不会被调用,但对于第二个,它会。

于 2012-04-05T06:58:32.727 回答