顯示具有 Flex 標籤的文章。 顯示所有文章
顯示具有 Flex 標籤的文章。 顯示所有文章

星期六, 3月 20, 2010

Flex 4 的Connect to Data 問題

最近似乎都會發現奇怪的鬼問題

我其中一個專案竟然不能用Connect to Data/Service (PHP)
Google了一下也沒看到有什麼解決方法

後來自己的解決方法是
在另外一個專案Connect to Data

然後在專案資料夾下找
.model\XXX.fml (假設專案名稱是XXX)
裡面有service的資料,選一下複製過去

.project
裡面有link的資料,也選一下複製過去

src\services\YYY (YYY是service名稱)
這是自動生成的ValueObject檔案,
整個複製到一樣的地方

記得都別用notepad開,排版會亂掉

Flex 的 layout



<s:Panel includeIn="checkPassWord" width="300" title="驗證視窗" borderVisible="true">
<s:layout>
<s:HorizontalLayout/>
</s:layout>
<s:Label text="請輸入密碼: " />
<s:TextInput id="password" displayAsPassword="true" />
<s:Button  label="確認 "/>
</s:Panel>

原來還有layout這個標籤阿
以後再試試看他到底可以幹嘛好了

星期三, 3月 03, 2010

用loader 讀取 Flex swf

因為flex做出來的swf架構和flash做出來的有點不一樣
最近用loader的時候就卡了好久 囧

後來發現只用
private function startForm(e:CloseEvent = null):void
{
    this.initStage("form");
    this.currentState = this.formState.name;
    this.form.contentLoaderInfo.addEventListener(Event.COMPLETE, function (e:Event):void {
       form.contentLoaderInfo.sharedEvents.dispatchEvent(new Event("startForm"));
    });
   
}


form裡面是接不到startForm這個事件的
因為Flex有兩個Frame,第一個Frame只有systemManager,第二個Frame才有元件
而Event.COMPLETE的時候,完成的就只有systemManager,這時的loader.content就是systemManager

所以只有當systemManager送出FlexEvent.APPLICATION_COMPLETE的時,元件才算完全被載入
這時的loader.systemManager才會變成主程式

所以修改成這樣:
private function startForm(e:CloseEvent = null):void
{
    this.initStage("form");
    this.currentState = this.formState.name;
    this.form.contentLoaderInfo.addEventListener(Event.COMPLETE, function (e:Event):void {
        form.content.addEventListener(FlexEvent.APPLICATION_COMPLETE, function (e:FlexEvent):void {
            form.contentLoaderInfo.sharedEvents.dispatchEvent(new Event("startForm"));
        });
    });
   
}



相關資料
一種Flex和as3代碼之間互相調用的方法
瞭解Flex程序的生命週期

星期六, 2月 27, 2010

ActionScript 3.0 中的 stage, root, MainTimeline

學了不算短的Flash還是沒有很瞭解stage, root, MainTimeline的差異

swf.com.tw - ActionScript 3.0里的stage(舞台), root和MainTimeline(主時間軸)
這篇的解釋非常詳細,也讓我很清楚的瞭解其中的差異

另外也做了個小實驗,發現Flash和Flex指的是不同的東西:

flash 下
trace(this, this.root, this.stage, root, stage, this==this.root, this.root == root, this.stage == stage);
[object Story] [object Story] [object Stage] [object Story] [object Stage] true true true


flash builder 4 下
trace(this, this.root, this.stage, root, stage, this==this.root, this.root == root, this.stage == stage);
WebometricsRanking null null null null false true true

Workspace in use or cannot be created, choose a different one. (Flex & Eclipse)

今天不小心把專案關掉了,結果想要再開竟然跳出Workspace in use or cannot be created, choose a different one這個錯誤,真是嚇出我一身冷汗XD

找了一下解決方法:


解決辦法:出現這種情況一般是workspace的配置文件中出現了.lock文件(workspace/.metadata/.lock),鎖定了workspace.把.lock文件刪除即可.

不過呢..刪掉之後我還是開不起來...
後來才發現Flex 開啟的時候會把專案開在Package Explorer裡面..囧
所以最後從那邊開就好了

星期一, 2月 15, 2010

ActionScript3.0 中的事件流(Event)

說要記錄一下自己對AS3事件的心得
可是拖了好久..想寫什麼大概也忘了

手邊有一些資料,姑且記錄一下吧~

以下節錄自SILK ROUTE - AS3筆記-事件流(event flow)
寫的很棒,非常建議先讀過

Flex Builder快捷建

Ctrl-F11: 執行(Run)
F11: 除錯(Debug)
Ctrl-Alt-Down: 重複目前所在編輯列(Repeat current line )
Alt-Up: 移動本列,或選擇列往上移動(Move line (or selection) up )
Alt-Down: 移動本列,或選擇列下往移動(Move line (or selection) down )
Ctrl-Click: 移至定義區(Go to definition (also F3) )
Ctrl-D: 刪除本列(Delete line )
Alt-/: 文字自動完成(Word completion (cycles through possible matches))
Ctrl-Up: 捲軸向上(Scroll up )
Ctrl-Down: 捲軸向下(Scroll Down )

星期四, 2月 04, 2010

swfloader vs Loader !! swfloader 只是方便而已..

因為swfloader的方便,原本想用它直接讀swf檔就好了,後來發現他沒有loader的靈活..
加上不知道怎麼樣讓被讀取的swf和讀取者溝通
(把bubble設成true可以單方向溝通,但是不能用sharedEvents,這個部分我另外PO文記錄)
後來整個翻新成用loader,做白工了 囧

以下就介紹一下swfloader

AS3 的 Dictionary Class

一開始還有點搞不懂Dictionary到底是什麼
後來發現她就跟Object一樣是hash表

不過有點不一樣的是,Dictionary可以用Object當作Key..
實在太神奇了XD


關聯數組有時候也稱為「哈希」或「映射」,它使用「鍵」而非數字索引來組織存儲的值。關聯數組中的每個鍵都是用於訪問一個存儲值的唯一字符串。關聯數組為 Object 類的實例,也就是說每個鍵都與一個屬性名稱對應。關聯數組是鍵和值對的無序集合。在代碼中,不應期望關聯數組的鍵按特定的順序排列。
ActionScript 3.0 中引入了名為「Dictionary」的高級關聯數組。字典是 flash.utils 包中 Dictionary 類的實例,使用的鍵可以為任意數據類型,但通常為 Object 類的實例。換言之,字典的鍵不侷限於 String 類型的值。
as3,Dictionary,關聯數組


節錄Kimo Chung's AS3 Playground - 秘技: 用Sprtie & Dictionary 熷加自定的variables 而不改變Sprite 的結構的例子


使用Dictionary 和Array 有何分別呢?
Array 使用object.toString() 作為index, 因此若果有兩個Sprite 的名稱相同, 會使用同一格


var myPictureIndexDict = new Dictionary;
var myPictureIndexArray = new Array;

var a = new Sprite;
a.name = "myName";
myPictureIndexDict[a] = 1;
myPictureIndexArray[a] = 1;

var b = new Sprite;
b.name = "myName";
myPictureIndexDict[b] = 2;
myPictureIndexArray[b] = 2;

trace(myPictureIndexDict[a]); //output: 1
trace(myPictureIndexArray[a]); //output: 2


延伸閱讀
Ticore's Blog - AS3 Dictionary 居然無法用 QName 當 Key

add MovieClip by addChild in Flex4

為什麼Flex內不能直接用addChild呢?
mybeky's blog -
Flex Application裡的addChild()
節錄一些句子:

在Flex Application裡,是不能直接用addChild添加Sprite,MovieClip等來自flash.display包裡的類的。譬如以下代碼就會報錯:
private function init():void { var sp:Sprite = new Sprite(); addChild(sp);}
這是因為Application的addChild方法並非完全繼承自DisplayObjectContainer,而是在Container那裡被重寫了,雖然參數child的類型是DisplayObject,但是它必須實現IUIComponent接口(所有Flex組件都實現了這一接口),才能添加。

星期二, 2月 02, 2010

Flex Metadata tag

Flex 組件的大小與各個屬性的差異

組件的大小(size)就是指組件的高度和寬度。查看Flex幫助,可以看出關於Flex組件大小的屬性有很多,以寬度為例,有以下有關寬度的屬性:

* width
* maxWidth
* minWidth
* explicitWidth
* explicitMaxWidth
* explicitMinWidth
* measuredWidth
* measuredMinWidth
* percentWidth
* scaleX
* 以及組件的MXML標記中的width屬性。

星期日, 1月 24, 2010

zendAMF傳送UTF-8中文資料

zendAMF本來就可以以UTF-8傳送中文
但是剛剛卻發現在test的時候傳不出資料

flex4連接zendPHP

最近這個案子,需要讓flash與php溝通

不過這件事情真是困擾了我好久
好不容易有了一點成果,記錄在這邊備忘
說不定也能幫助有需要的人