Flex:Actionscript&使用XML文件的DataBinding

时间:2011-03-23 17:38:21

标签: flex actionscript-3

我创建了自己的组件,它使用XML文件的lastResult绑定到它的dataProvider属性。

绑定发生在AS中,如下所示: BindingUtils.bindProperty(this.myChildComponent1,"dataProvider",this,"dataProvider");

以上成功地将this.dataProvider绑定到我的子组件dataProvider。 问题出现了我有另一个组件,我需要绑定结果XML的子的值。更像是:
this.dataProvider.child('NextNode')

但问题是当组件的createChildren()被调用时,XML lastResult尚未填充,因为请求是异步HTTPRequest因此this.dataProvider等于{{ 1}}。

最终当数据到达时,它在内部被正确绑定,但我无法通过以下方式将数据的下一个子节点绑定到另一个组件(null): this.myChildComponent2:没有这样的孩子。

BindingUtils.bindProperty(this.myChildComponent2,"dataProvider",this,"dataProvider.child('NextNode'");:说BindingUtils.bindProperty(this.myChildComponent2,"dataProvider",this,this.dataProvider.child('NextNode'));为空/未定义。

即使发出: this.dataProvider无法正常工作,因为只有在if(this.dataProvider == null) {this.invalidateProperties();} else //Bind Child内部检查commitProperties之后,我才会调用invalidateProperties()

感谢任何帮助。感谢。

1 个答案:

答案 0 :(得分:0)

我没有对此进行测试,也没有尝试过绑定到XML&以前的XML孩子,但这里就是。

您应该尝试使用属性链来执行此绑定。由于BindingUtil使用字符串作为属性描述而不是表示要调用的函数的字符串,因此您的代码看起来不应该起作用。你的代码:

BindingUtils.bindProperty(this.myChildComponent2,"dataProvider",this,"dataProvider.child('NextNode')");

应改为:

BindingUtils.bindProperty(this.myChildComponent2,"dataProvider",this,["dataProvider","NextNode"]);

除了你的代码看起来不应该工作之外,还有其他原因可以这样做。

  1. XML子节点不会调度属性更改事件,因此如果子节点发生更改,则无论如何都不会在第二个组件中更新。

  2. 使用属性链意味着将查找对“dataProvider”和“NextNode”的更改,因此如果更改绑定会触发。

  3. 使用链意味着您不必担心在启动时未加载XML。如果链中的属性不可用,则目标仅设置为null。

  4. 因此,如果您使用此方法,则只有对“dataProvider”的更改才会触发绑定(this.dataProver =其他内容等)。如果您希望通过更改“NextNode”来触发绑定,则必须手动调度PropertyChange事件以指示发生了更改:

    dataProvider.dispatchEvent(new PropertyChangeEvent(PropertyChangeEvent.PROPERTY_CHANGE,false,false,PropertyChangeEventKind.UPDATE,"NextNode",*oldValue*,*newValue*);
    

    其中oldValue / newValue是可选的。让我知道这是否有效...我认为它应该但是嘿,谁知道。