actionscript中的双向数据绑定会导致堆栈溢出

时间:2010-07-21 14:55:09

标签: flex flex3

我将两个AutoCompleteModified对象绑定到另一个;意思是你打字 在一个,它在另一个中选择正确的对象。我工作时效果很好 在MXML中定义它:

但是,用户可以向网格添加新行,然后设置绑定和 对象通过actionscript,它给出一个'undefined'错误:ChangeWatcher line 427 / wrapHandler。

var innerHBox:HBox = new HBox();

var dtc_acm:AutoCompleteModified = new AutoCompleteModified(); dtc_acm.dataProvider = data2; dtc_acm.labelField ='id';

var cp_acm:AutoCompleteModified = new AutoCompleteModified(); cp_acm.dataProvider = data2; cp_acm.labelField ='name'; cp_acm.width = this.CP1.width;

BindingUtils.bindProperty(dtc_acm,'selectedIndex',cp_acm,'selectedIndex');

BindingUtils.bindProperty(cp_acm,'selectedItem',dtc_acm,'selectedItem');

innerHBox.addChild(dtc_acm); innerHBox.addChild(cp_acm);

我不明白这里会发生什么。谁能看到任何潜力 我的代码中存在问题?如果我只保持单向绑定,那么它工作正常。但两者都抛出这个错误。有什么不仅仅是在动作脚本中做双向,而是添加不在舞台上的组件吗?

非常感谢您提供任何有用的提示,

马特

2 个答案:

答案 0 :(得分:1)

我正在尝试做同样的事情。它适用于MXML,但不适用于AS。例如,这有效:

<mx:TextArea id="t1" verticalScrollPosition="{t2.verticalScrollPosition}" height="200"/>
<mx:TextArea id="t2" verticalScrollPosition="{t1.verticalScrollPosition}" height="200"/>

如果我滚动其中一个TextAreas,那么另一个也会滚动。但是,尝试在actionscript中执行相同的操作会导致堆栈溢出(无限循环)

BindingUtils.bindProperty( _t1, 'verticalScrollPosition', _t2, 'verticalScrollPosition' );
BindingUtils.bindProperty( _t2, 'verticalScrollPosition', _t1, 'verticalScrollPosition' );

我使用了 -keep-generated-actionscript 编译器选项,查看了mxml示例生成的asctionscript,并创建了几个mx.binding.Binding对象和看起来关键是设置 twoWayCounterpart 属性。我还没有尝试过模仿那段代码,但它可能对你有帮助。

答案 1 :(得分:0)

由于这两个组件是这样绑定的,所以我对你看到这个并不感到惊讶,我更惊讶它是通过mxml工作的。

您是否尝试将bindProperty中的(可选)第5个参数更改为true?该参数是commitOnly,默认为false。这可能会解决您的问题。

另一种方法可能是使用中间变量来存储所选项目并将组件绑定到该变量。

希望有所帮助。