假设我有以下内容:
public class MyObject
{
[Bindable]
public var foo:int = 3;
}
...
[Bindable]
var _obj:MyObject = null;
绑定foo的最佳方法是什么,以便在_obj设置为新实例时更新此绑定?
我试过了:
<mx:Label text="{_obj&&_obj.foo}"/>
但它不漂亮。我可以用某种方式表达这个
SO :: Flex社区的想法是什么?
答案 0 :(得分:2)
绑定不依赖于属性;您可以获得绑定字段或属性的好处。
看起来你可能会留下一些东西,也许吧?例如,一旦类及其实例标记为Bindable,以下MXML和AS就可以在字段和属性上进行绑定:
package
{
[Bindable]
public class MyFoo
{
public var myPublicField:int;
private var _myPrivateField:int;
public function MyFoo()
{
myPublicField = 0;
myPublicProperty = 0;
}
public function get myPublicProperty():int
{
return _myPrivateField;
}
public function set myPublicProperty(value:int):void
{
_myPrivateField = value;
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
<![CDATA[
[Bindable]
private var myFoo:MyFoo;
private function increment():void
{
if (!myFoo)
myFoo = new MyFoo();
myFoo.myPublicField += 1;
myFoo.myPublicProperty += 1;
}
private function replace():void
{
myFoo = new MyFoo();
}
]]>
</mx:Script>
<mx:VBox>
<mx:HBox>
<mx:Label text="Field:" />
<mx:Text text="{myFoo.myPublicField}" />
</mx:HBox>
<mx:HBox>
<mx:Label text="Property:" />
<mx:Text text="{myFoo.myPublicProperty}" />
</mx:HBox>
<mx:Button label="Increment Both Counts" click="increment()" />
<mx:Button label="Replace with New Foo" click="replace()" />
</mx:VBox>
</mx:Application>
顺便提一下,如果你单独标记字段和属性Bindable,而不是标记类,这只是相同的简写,效果将是相同的。另请注意,myFoo默认情况下为null,如示例代码中所示(即“= null”赋值是多余的)。
这个例子有帮助吗?如果没有,请发表评论,我会回来查看。希望它能做到!
答案 1 :(得分:1)
使类可绑定:
[Bindable]
public class MyObject
{
[Bindable]
public var foo:int = 3;
}
然后,这有用吗?
<mx:Label text="{_obj.foo}"/>
答案 2 :(得分:0)
使用属性而不是公共变量。
// Object
package MyObject
{
public class MyObject
{
private var message:String;
public function set Message(messagein:String):void
{
message = messagein;
return;
}
[Bindable]
public function get Message():String
{
return message;
}
public function MyObject()
{
}
}
}
// Flex that calls it
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="281" height="156">
<mx:Script>
<![CDATA[
import MyObject.MyObject;
[Bindable]
private var o:MyObject = new MyObject();
private function UpdateMessage():void
{
o.Message = TextIn.text;
return;
}
]]>
</mx:Script>
<mx:Label x="31" y="29" text="{o.Message}" width="201" id="TextOut"/>
<mx:TextInput x="31" y="55" id="TextIn"/>
<mx:Button x="31" y="85" label="Button" click="UpdateMessage()"/>
</mx:Application>
答案 3 :(得分:0)
我会看看mx.binding.utils.BindingUtils类。您可能会在那里找到一些东西,但(正如Christian Nunciato所说)数据绑定实际上是为对象的属性中的更改而构建的,而不是对象本身。
干杯