无法将flex中的bindProperty指定为特定值

时间:2014-05-07 11:30:34

标签: flex data-binding flex4 mxml

我在flex4中的应用程序有问题,我的按钮有这个代码:

<buttons:MyButton id="btnNewPost"
    label="{I18nManager.getInstance().main.newPost}"
    minWidth="170"
    click="{doSomething()}"
    creationComplete="btnNewPost_creationCompleteHandler(event)"/>

在创作完成后,我有了这段代码:

if (this.newItemButtonEnabledWithCategories)
{
    BindingUtils.bindProperty(this.btnNewPost, "enabled", ModelLocator.getInstance(), "currentCategory");
}

嗯,所以很明显,当属性currentCategory不为空时,该按钮将被启用。

我想要的是什么:

我想将属性启用设置为ModelLocatoritemMode的其他属性,但仅当itemMod 准备好

我没有运气就试过BindingUtils.bindProperty(this.btnNewPost, "enabled", ModelLocator.getInstance(), "itemMode");,因为如果itemMode有任何值,那么属性enabled总是true

如果itemMode 准备好,是否有任何方法只能启用项目?

2 个答案:

答案 0 :(得分:2)

您可能希望使用bindSetter而不是bindProperty。这允许您在属性更改时拥有方法句柄:

BindingUtils.bindSetter(itemModeChanged, 
                        ModelLocateor.getInstance(), 
                        "itemMode");

protected function itemModeChanged(mode:String):void
{
    this.btnNewPost.enabled = (mode == "ready");
}

(另一种想法,是否有任何理由你无法在MXML中指定绑定?enabled="{ModelLocator.getInstance().itemMode == 'ready'}我没有尝试过这个确切的例子来验证它的工作原理,但我认为应该这样做。)

答案 1 :(得分:0)

您可以绑定到itemModeIsReady中的新媒体资源ModelLocator。在itemMode的setter中,为PropertyChangeEvent发送itemModeIsReady并获得适当的getter:

public function set itemMode(mode:String):void {
  var previousValue = _itemMode;
  //existing 
  dispatchEvent(PropertyChangeEvent.createUpdateEvent(this, "itemModeIsReady", previousValue == "ready", mode == "ready"));
}

[Bindable]
public function get itemModeIsReady():Boolean {
  return itemMode == "ready";
}