Flash Flex-绑定中的条件(用于TextInput prop.text)

Flash Flex-绑定中的条件(用于TextInput prop.text),flash,apache-flex,actionscript-3,Flash,Apache Flex,Actionscript 3,比如说 有可能做那样的事吗?没有;这对于默认绑定机制来说太复杂了。但是,您没有提供完整的条件,因此很难明确指示您 在实现要用作绑定源的属性时,调度一个事件。在set方法中类似这样的内容: public function set myBindableProperty(value:something):void{ _myBindableProperty = value; dispatchEvent(new Event('myBindablePropertyChanged')); } 然后添加一

比如说


有可能做那样的事吗?

没有;这对于默认绑定机制来说太复杂了。但是,您没有提供完整的条件,因此很难明确指示您

在实现要用作绑定源的属性时,调度一个事件。在set方法中类似这样的内容:

public function set myBindableProperty(value:something):void{
 _myBindableProperty = value;
 dispatchEvent(new Event('myBindablePropertyChanged'));
}
然后添加一个事件侦听器:

myComponentWithBindableProperty.addEventListener('myBindablePropertyChanged', onmyBindablePropertyChanged);
最后,在事件处理程序中执行绑定操作

public function onmyBindablePropertyChanged(event:Event):void{
 if(){
  sd.text = 0;
 } else if(){
  sd.text = 1;
 } else {
  sd.text = 2;
 }
}

内部;MXML绑定语法不起作用;大体上就像我刚才描述的那样。它稍微复杂一些;但这就是要点

您可以使用一个函数来实现您的逻辑:

private function foo( value : String = "" ) : int
{
  if ( value == 'a')
  {
    return 0;
  }
  else if ( value == 'b' )
  {
    return 1;
  }
  else
  {
    return 2;
  }
}
然后:


如果在第一个文本输入中键入a或b,则第二个文本输入中的值将更改以反映当前状态。

但这不具有约束力。每当source.text发生更改时,此代码中的任何内容都不会使sd.text发生更改。我很确定这会引发编译器警告,因为函数不能被绑定,除非它们是特殊的get或set函数。你试过了吗?它起作用了。。。。该函数是可绑定的。编译器警告您命名我在示例中没有提到但不是必需的事件。我更新了我的示例,为绑定事件指定了一个名称,以消除警告。@Flextras语法有效。我认为这就像使用BindingUtils.bindSetter函数一样。您不是绑定到函数,而是通过函数运行值,并在绑定执行时获得返回结果。您甚至可以为任意多个可绑定的值执行此操作。编辑,尽管函数上的可绑定元标记没有用处。扔掉它吧。而且,它不仅仅局限于功能。您可以执行任何返回值的有效语句。我一直使用tournery运算符,每当在这个.selected上执行绑定时,它都会显示true或false。有趣的事!:bpanulla和drkstr是对的。除了在函数顶部不需要可绑定的标记。绑定已经由source.text.设置了,你不觉得有点太复杂了吗?与生成的ActionScript中的幕后操作相比;不,我不这么认为,这不是重点。开发人员看到的代码越少越好,这就是为什么我们有花括号之类的快捷方式。@J_A_X我相信这种方法比使用绑定要灵活得多。代码越少越好,事实上,很多时候,开发人员会选择更多的代码,因为其他东西被认为更重要。框架就是一个很好的例子;选择它们是因为在长期维护中可以感觉到收益,而不是因为代码更少。如果您使用Flex,那么您使用的代码更少,因为您没有重新创建整个组件库和其他UTIL。你看不到那些代码,你只是用它来创建你想要的东西,这意味着你的最终项目的代码更少。您所做的是重做绑定为您所做的事情,从而向您的代码库添加更多代码并增加复杂性。在这种情况下,您应该更改已接受的答案。请重新表述您的问题
<s:TextInput id="source" text=""/>

<s:TextInput id="sd" text="{foo( source.text )}"/>