Apache flex 等效于使用纯Actionscript的Flex数据绑定

Apache flex 等效于使用纯Actionscript的Flex数据绑定,apache-flex,flash,actionscript-3,actionscript,air,Apache Flex,Flash,Actionscript 3,Actionscript,Air,当Flex看到这样的情况时: <mx:Label text="Hello {MyVar} World!"/> 如何实现这种“动态”绑定。。。在哪里我直到运行时才知道“StringToBind”的值?出于这个问题的目的,我们可以假设我确实知道“StringToBind”中提到的任何变量都保证在运行时存在 我已经意识到有更直接的方法静态地完成这件事,并且只使用Flex/MXML。不过,对于我的项目来说,了解如何在没有MXML的情况下实现这一点很重要 这样做: lab.text=stri

当Flex看到这样的情况时:

<mx:Label text="Hello {MyVar} World!"/>
如何实现这种“动态”绑定。。。在哪里我直到运行时才知道“StringToBind”的值?出于这个问题的目的,我们可以假设我确实知道“StringToBind”中提到的任何变量都保证在运行时存在

我已经意识到有更直接的方法静态地完成这件事,并且只使用Flex/MXML。不过,对于我的项目来说,了解如何在没有MXML的情况下实现这一点很重要

这样做: lab.text=stringToBind.replace(“{myVar}”,str)

将不起作用,因为这只是将“{myVar}”的值(甚至可能不是“stringToBind”!!中引用的变量)分配给标签一次,并且不考虑myVar何时和是否更改!我不需要使用bindProperty之类的东西吗?

使用

请注意,这不是严格意义上的纯ActionScript,因为数据绑定本身是一个Flex概念;这只是一种不使用MXML的语法。您仍然在内部使用Flex绑定,但是再次强调,如果Flexy使用,仅使用
标签
,会使

请注意,这不是严格意义上的纯ActionScript,因为数据绑定本身是一个Flex概念;这只是一种不使用MXML的语法。您仍然在内部使用Flex绑定,但同样,单独使用
标签
会使Flexy

这只是生成代码的一部分。请随意添加
-将生成的actionscript
参数保留在编译器选项中,并在
bin debug\generated
中读取所有生成的actionscript


这只是生成代码的一部分。请随意添加
-将生成的actionscript
参数保留在编译器选项中,并在
bin debug\generated
中读取所有生成的actionscript


该库提供了一个直观的构建器API,用于在ActionScript中设置绑定。

披露:无耻的自我提升


该库提供了一个直观的构建器API,用于在ActionScript中设置绑定。

您已经硬编码了“StringToBind”。关键是,在设计时不知道绑定的内容。当myVar更改时,标签文本也不会更改,如果这样做的话。@Joshua,你尝试过吗?当
myVar
更改时,标签文本将更改。关于硬编码-这不像
硬编码那样硬编码。您可以在运行时随时更新
stringToBind
,并使用我的第二种方法。@Joshua您没有抓住要点。要点是使用bindSetter设置一个函数,该函数将在您选择的属性值更改时执行。在该函数中执行的任何操作都取决于您。您已经硬编码了“StringToBind”。关键是,在设计时不知道绑定的内容。当myVar更改时,标签文本也不会更改,如果这样做的话。@Joshua,你尝试过吗?当
myVar
更改时,标签文本将更改。关于硬编码-这不像
硬编码那样硬编码。您可以在运行时随时更新
stringToBind
,并使用我的第二种方法。@Joshua您没有抓住要点。要点是使用bindSetter设置一个函数,该函数将在您选择的属性值更改时执行。不管你在这个函数中做什么,都取决于你。你已经硬编码了“Hello World”和“MyVar”。。。这对我有什么帮助?你硬编码了“Hello World”和“MyVar”。。。这对我有什么帮助?约书亚,我希望这或多或少是你想要的:约书亚,我希望这或多或少是你想要的:
public function CustomDynamicBinding(StringToBind:String):Label {
  // *EXAMPLES* Of StringToBind:
  //    "Hello {MyVar} World!"
  //    "Product: {name} ${price}.00"
  //    "{data.label}, {data.description}"
  // I've Written It This Way Because I DO NOT KNOW The Exact Text To Be Bound At Design Time.
  [Bindable]
    var Lab:Label=new Label();
    Lab.text=???
    return(Lab);
}
var stringToBind:String = "Hello {myVar} World!";
[Bindable]
var myVar:String = 'Flex';
var lab:Label = new Label();
BindingUtils.bindSetter(labelValue, this, "myVar");
function set labelValue(str:String):void
{
  lab.text = "Hello " + str + " World!";
  //or if you want it dynamic
  lab.text = stringToBind.replace("{myVar}", str);
}
private function _BindingSource_bindingsSetup():Array
{
    var result:Array = [];

    result[0] = new mx.binding.Binding(this,
        function():String
        {
            var result:* = "Hello " + (MyVar) + " World!";
            return (result == undefined ? null : String(result));
        },
        null,
        "_BindingSource_Label1.text"
        );


    return result;
}