我在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
不为空时,该按钮将被启用。
我想要的是什么:
我想将属性启用设置为ModelLocator
,itemMode
的其他属性,但仅当itemMod 准备好
我没有运气就试过BindingUtils.bindProperty(this.btnNewPost, "enabled", ModelLocator.getInstance(), "itemMode");
,因为如果itemMode有任何值,那么属性enabled
总是true
如果itemMode
准备好,是否有任何方法只能启用项目?
答案 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";
}