【问题标题】:Flex ChangeWatcher bind to a negative conditionFlex ChangeWatcher 绑定到否定条件
【发布时间】:2017-03-28 01:43:57
【问题描述】:

我在组件中有一个可绑定的 getter,它会在 [隐藏] 计时器运行时通知我。我还有一个上下文菜单,如果这个计时器正在运行,它应该禁用其中一个菜单项。是否可以创建一个 ChangeWatcher 来监视可绑定属性/getter 的 否定 条件并更改菜单项的 enabled 属性?

以下是我尝试绑定在一起的基本方法:

A类:

[Bindable]
public function get isPlaying():Boolean {
    return (_timer != null) ? _timer.running : false;
}

B类:

private var _playingWatcher:ChangeWatcher;
public function createContextMenu():void {
    //...blah blah, creating context menu
    var newItem:ContextMenuItem = new ContextMenuItem();
    _playingWatcher = BindingUtils.bindProperty(newItem, "enabled", _classA, "isPlaying");
}

在上面的代码中,我有相反的情况:当 isPlaying() 为真时,菜单项被启用;我希望它仅在条件为 false 时启用。

我可以创建第二个 getter(还有其他依赖于当前 getter 的绑定)来返回相反的条件,但这对我来说听起来很难看:

[Bindable]
public function get isNotPlaying():Boolean {
    return !isPlaying;
}

这可能吗,还是我完全错过了另一种方法?

【问题讨论】:

    标签: apache-flex binding getter-setter


    【解决方案1】:

    可以在绑定实用程序上使用绑定 Setter,但您的方法似乎有效,否则绑定属性对其映射的属性类型视而不见,因此它没有负面条件参数。

    【讨论】:

    • “绑定属性是盲目的” - 是的,我很害怕 :)
    【解决方案2】:

    我会扩展 ContextMenuItem 并在其上创建一个自定义属性,您可以使用它来设置底层 ContextMenuItem 的启用与否

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多