我创建了自己的组件,它使用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()
。
感谢任何帮助。感谢。
答案 0 :(得分:0)
我没有对此进行测试,也没有尝试过绑定到XML&以前的XML孩子,但这里就是。
您应该尝试使用属性链来执行此绑定。由于BindingUtil使用字符串作为属性描述而不是表示要调用的函数的字符串,因此您的代码看起来不应该起作用。你的代码:
BindingUtils.bindProperty(this.myChildComponent2,"dataProvider",this,"dataProvider.child('NextNode')");
应改为:
BindingUtils.bindProperty(this.myChildComponent2,"dataProvider",this,["dataProvider","NextNode"]);
除了你的代码看起来不应该工作之外,还有其他原因可以这样做。
XML子节点不会调度属性更改事件,因此如果子节点发生更改,则无论如何都不会在第二个组件中更新。
使用属性链意味着将查找对“dataProvider”和“NextNode”的更改,因此如果更改绑定会触发。
使用链意味着您不必担心在启动时未加载XML。如果链中的属性不可用,则目标仅设置为null。
因此,如果您使用此方法,则只有对“dataProvider”的更改才会触发绑定(this.dataProver =其他内容等)。如果您希望通过更改“NextNode”来触发绑定,则必须手动调度PropertyChange事件以指示发生了更改:
dataProvider.dispatchEvent(new PropertyChangeEvent(PropertyChangeEvent.PROPERTY_CHANGE,false,false,PropertyChangeEventKind.UPDATE,"NextNode",*oldValue*,*newValue*);
其中oldValue / newValue是可选的。让我知道这是否有效...我认为它应该但是嘿,谁知道。