使用 Flex 開發過一陣子後,對於 [Bindable] 這個懶人 tag 有說不出的喜愛,然而在 Flash 中利用 Proxy 其實也可以達到相同的功用...但是 Flex SDK 免費擺在那邊不好好使用太對不起自己了...
在參考了 Ticore's Flex 2 Bindable Metadata Tag 背後實際作用 ( Ticore 萬歲!!),其實只需要將 Flex SDK frameworks/libs/framework.swc 包加到 Flash library 下,就可以使用 Flex 的 Binding 機制來達到綁定。前提是提供綁定的 host 屬性需要有 [Bindable] 才有作用,所以下面範例無法直接將 txt.text 與 txt1.text 綁定,需要透過 [Bindable] string:String 來做中介。
以下使用 FlashDevelop or Flex Builder 來編寫:
在參考了 Ticore's Flex 2 Bindable Metadata Tag 背後實際作用 ( Ticore 萬歲!!),其實只需要將 Flex SDK frameworks/libs/framework.swc 包加到 Flash library 下,就可以使用 Flex 的 Binding 機制來達到綁定。前提是提供綁定的 host 屬性需要有 [Bindable] 才有作用,所以下面範例無法直接將 txt.text 與 txt1.text 綁定,需要透過 [Bindable] string:String 來做中介。
以下使用 FlashDevelop or Flex Builder 來編寫:
package {
import flash.display.Sprite;
import flash.events.Event;
import flash.text.TextField;
import mx.binding.utils.BindingUtils;
[SWF(width='400', height='300', backgroundColor='#ffffff', frameRate='30')]
public class TestBindable extends Sprite
{
public var input:TextField;
[Bindable]
public var string:String = "";
public function TestBindable()
{
if( stage ){
init();
}else {
addEventListener( Event.ADDED_TO_STAGE , init );
}
}
private function init(event:Event = null):void{
if( event ) removeEventListener( Event.ADDED_TO_STAGE , init );
var txt:TextField = new TextField;
input = new TextField;
input.type = "input";
input.border = true;
input.y = 50;
addChild( txt );
addChild( input );
input.addEventListener( Event.CHANGE , onChange );
BindingUtils.bindProperty( txt, "text" , this, "string" );
}
private function onChange(event:Event):void{
string = input.text;
}
}
}
推, 真的超好用的
ReplyDelete原來是可以搭配AS來處理的啊!
ReplyDelete我一直以為只能搭配MXML才能動
請問可以在Sprite容器嵌入Spark / MX的Button等物件嗎?
ReplyDelete找好久都找不到相關資訊的說……
不行,請改用 Flash Builder 吧...
ReplyDelete