【问题标题】:Flex: Actionscript & DataBinding using XML FileFlex:使用 XML 文件的 Actionscript 和 DataBinding
【发布时间】:2011-03-23 17:38:21
【问题描述】:

我创建了自己的组件,它使用 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 等于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 只被调用一次,尽管我在检查内部 commitProperties() 后调用了 invalidateProperties()

感谢任何帮助。谢谢。

【问题讨论】:

    标签: apache-flex actionscript-3


    【解决方案1】:

    我还没有对此进行测试,也没有尝试过绑定到 XML 和 XML 子级,但是这里可以。

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

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

    应该改为: .

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

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

    1. XML 子节点不会调度 propertychange 事件,因此如果子节点确实发生了变化,它也不会在您的第二个组件中更新。

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

    3. 使用链意味着您不必担心启动时不会加载 XML。如果链中的某个属性不可用,那么目标只是设置为 null。

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

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

    oldValue/newValue 是可选的。让我知道这是否可行...我认为应该可以,但是嘿,谁知道呢。

    【讨论】:

    • 基本上我想为 NextChild 节点上的项目填充 2 个列表。 BindingUtils.bindProperty(this.myChildComponent2,"dataProvider",this,["dataProvider","NextNode"]); 表示未知属性 NextNode,这很明显,因为没有该名称的属性,而是 XMLCollectionList 的子项。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-06
    • 1970-01-01
    • 2014-11-17
    • 2010-10-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多