【问题标题】:Flex - condition in binding (for TextInput prop. text)Flex - 绑定条件(用于 TextInput 道具。文本)
【发布时间】:2011-06-09 16:25:58
【问题描述】:

例如<s:TextInput id="sd" text="{if () {0} else if() {1} else {2}}"/>

有可能做这样的事情吗?

【问题讨论】:

  • 在这种情况下,您应该更改接受的答案。
  • 请重新表述您的问题

标签: flash apache-flex actionscript-3


【解决方案1】:

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

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

然后:

<s:TextInput id="source" text=""/>

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

如果您在第一个 TextInput 中键入“a”或“b”,第二个中的值将更改以反映当前状态。

【讨论】:

  • 这不具有约束力。每当 source.text 更改时,此代码中的任何内容都不会使 sd.text 更改。我很确定这会引发编译器警告,因为函数不能被绑定,除非它们是特殊的“get”或“set”函数。
  • 你试过了吗?它有效....该功能是可绑定的。编译器会警告您命名事件(我在示例中没有这样做),但这不是必需的。我更新了我的示例,为绑定事件命名以使警告消失。
  • @Flextras 语法有效。这就像使用 BindingUtils.bindSetter 函数(我认为)。您不是绑定到函数,而是通过函数运行值并在绑定执行时获取返回结果。您甚至可以根据需要为任意数量的可绑定值执行此操作。 edit 虽然函数上的可绑定元标记没用。摆脱它。
  • 此外,它不仅限于功能。您可以执行任何返回值的有效语句。我一直使用 tournery 运算符&lt;s:TextInput text="{(this.selected)? 'True' : 'False'}"/&gt; 将在 this.selected 上执行绑定时显示 true 或 false。好玩的东西! :)
  • bpannulla 和 drkstr 是对的。除非您不需要在函数顶部使用 Bindable 标记。绑定已由source.text 设置。
【解决方案2】:

没有;这对于默认绑定机制来说太复杂了。但是,你没有提供完整的条件,所以很难明确地指导你。

当您实现要用作绑定源的属性时,分派一个事件。在 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 绑定语法可以;基本上;就像我刚才描述的那样。它稍微复杂一些;但这就是要点。

【讨论】:

  • 您不觉得有点过于复杂吗?
  • 与生成的 ActionScript 中的幕后操作相比;不,我不这么认为。
  • 这不是重点。开发人员看到的代码越少越好,这就是为什么我们有像花括号这样的快捷方式。
  • @J_A_X 我相信这种方法比使用绑定要灵活得多。 “更少的代码”并不是更好,事实上很多时候开发人员选择更多的代码是因为其他东西被认为更重要。框架就是一个很好的例子。选择它们是因为在长期维护方面的感知收益,而不是因为更少的代码。
  • 如果您使用的是 Flex,那么您将使用 更少的代码,因为您没有重新创建整个组件库和其他实用程序。您看不到该代码,您只是使用它来创建您想要的任何内容,这意味着您的最终项目具有较少的感知代码。您正在做的是重做绑定为您所做的工作,从而为您的代码库添加更多代码并增加复杂性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-13
  • 2012-03-09
  • 1970-01-01
  • 2010-12-31
  • 1970-01-01
  • 2014-04-29
  • 1970-01-01
相关资源
最近更新 更多