【问题标题】:Weird behavior in BindingUtils.bindProperty: non deterministicBindingUtils.bindProperty 中的奇怪行为:不确定
【发布时间】:2011-06-08 00:34:17
【问题描述】:

我有点生气了。

我在使用 BindingUtils.bindSetterbindProperty 时遇到了奇怪的问题。我认为,如果我将两个变量与BindingUtils.bindProperty 绑定,我可以确定它们将始终同步。但事实并非如此。

我在 creationCompleteHandler 中有这段代码:

BindingUtils.bindProperty(this, "pendingHold", drhHold, "pending", false, true);

但是当我调试时,应该在某个时候绑定在一起的两个变量有不同的值:

我错过了什么?

提前致谢, 努诺

【问题讨论】:

  • 实际上,我决定使用 bindProperty 是因为 bindSetter 也无法正常工作。它只是有时调用设置器......我一无所知......

标签: apache-flex data-binding binding flex4


【解决方案1】:

您定义的绑定是单向的。当drhHold.pending 被设置时,this.pendingHold 将被设置。这不会反过来。

换句话说,如果您有以下代码,您所描述的可能会发生:

this.drhHold.pending = false;
this.pendingHold = true;

如果你想让这双向进行,那么你需要设置另一个方向:

BindingUtils.bindProperty(this, "pendingHold", drhHold, "pending", false, true);
BindingUtils.bindProperty(drhHold, "pending", this, "pendingHold", false, true);

当然,所有这些都假设这两个属性都是[Bindable]

【讨论】:

  • 我明白了。但我不希望它双向发展。它只是一种方式,无论如何它都不起作用。 “pendingHold”只是一个包装器,这样我就可以暴露“drhHold.pending”而不暴露“drhHold”。谢谢。
  • 所以这里发生的事情是:他们都是truedrhHold.pending 变成了 false,但 pendinhHold 没有改变,仍然是 true
  • 好的。值得一试。问题中没有足够的信息来辨别这一点。嗯...您确定没有其他东西将this.pendingHold 设置回true 某个地方吗?您是否在变量本身上设置了断点以查看 getter/setter 何时被调用?这也会让我发疯......我想下一步我会尝试自己连接绑定(在drhHold 上挂钩更改事件并手动设置pendingHold)看看我是否可以学到任何东西从那。
  • @nununo,如果你想做的只是有一个暴露 drhHold.pending 而不暴露 drhHold 的包装器,为什么不使用可绑定的 getter?!
  • @Brian,实际上,您不必执行更改传播通知除非 drhHold 对象在类中发生更改。如果它只是布尔值,他会没事的,因为绑定到它的人会直接在 drhHold 中收听布尔值。
【解决方案2】:

在这种情况下不需要绑定:

public class Class1
{
   private var _class2:Class2 = new Class2();

   [Bindable]
   public function get pending():Boolean
   {
      return this._class2.pending;
   }

   public function set pending(value:Boolean):void
   {
      this._class2.pending = value;
   }
}

只要 Class2.pending 也是可绑定的,这将使 Class1.pending 绑定到 Class2.pending。

【讨论】:

  • 你试过了吗?我试过了,对_class2.pending 的更改并没有导致class1.pending 的更改通知。是的,_class2.pending 是可绑定的……我的示例中的视图绑定到两者。见pastie.org/2045521pastie.org/2045526
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-01
  • 2019-06-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多