fc2ブログ

【Flex】条件分岐や繰り返し内での変数定義【ActionScript3.0】

2010-09-09 01:33:20 Thu

初めて知ったのでメモ。

ActionScript のソースにおいて、条件分岐や繰り返し処理の内部にて変数定義を行った場合、
スコープはその条件分岐処理内や繰り返し処理内のみになると思っていたが、メソッド内で宣言した変数はどうあろうともメソッドスコープとなるようです。

var list:ArrayCollection = new ArrayCollection();
for(var obj:Object in list){
	
	var hensu:Object = null;
	
}

for(var objEx:Object in list){
	
	var hensu:Object = null;
	
}


上記のソースでは、FlashBuilder で「記述 リソース パス ロケーション タイプ 3596: 変数定義が重複しています。 Hoge.mxml /Hoge/src 行 39 Flex の問題」と警告が出ます。
それぞれ繰り返し処理内で変数宣言しているからその処理内スコープかと思えば警告はおかしいのですが、
これがメソッドスコープとなるのであれば警告は納得できます。
メソッド内で変数宣言するのであれば、メソッドのはじめで変数宣言しておくようにするなどしたほうが
ソースがみやすくなるような気がしました。

【Flex】Objectの連想配列【ActionScript3.0】

2010-09-09 01:23:29 Thu

ActionScript の Object は Java でいう Map のような使い方が可能です。
それが Object の連想配列です。

参考URL:http://yamasv.blog92.fc2.com/blog-entry-62.html

// マップみたいに使うObjectのインスタンス生成
var map:Object = new Object();

// キーとバリューを設定する。2つのやり方があるが結果は同じ。
map["key1"] = "value1";
map.key2 = "value2";

trace(map["key1"]);//value1
trace(map.key1);//value1
trace(map.key10000);// undefined

for(var key:String in map){
	trace(key);//key1 key2
	trace(map[key]);// value1 value2
}

if(map.hasOwnProperty("key1")){// 存在する
	trace("存在する")
} else {
	trace("存在しない")
}

if(map.hasOwnProperty("key3")){// 存在しない
	trace("存在する")
} else {
	trace("存在しない")
}

// キーと値を列挙して初期化
var map2:Object = {six:"hogehoge" , seven:"araragisan", eight:"norioisi"};
for (var key:String in map2)
	trace(key + ":" + map2[key]);// eight:norioisi seven:araragisan six:hogehoge



■Objectの連想配列にキーと値を設定する方法
map["キー名"] = 値のオブジェクト;
map.キー名 = 値のオブジェクト;

■Objectの連想配列から値を取得する方法
map["キー名"];
map.キー名;

■Objectの連想配列に既にキーが設定されるか確認する方法
map.hasOwnProperty(キー名);

■Objectの連想配列の初期化
var map2:Object = {キー名:値のオブジェクト , キー名:値のオブジェクト, キー名:値のオブジェクト};


ちなみに上記のソースだと変数定義重複の警告がでます。

【Flex】コンフィグファイルの出力【Ant】

2010-07-04 18:16:01 Sun

Flex Builder や Flash Builder を使用していると、Flex SDK からのコンパイル方法が隠蔽されて、やり方がわからなくなる。

そんなときに便利なのが下記の追加コンパイラー引数。

   -dump-config ./config.xml


WS000012_20100704171116.jpg

これにより、IDE が自動でやってくれている Flex コンパイルのコンフィグファイル(ただし完全ではない模様)を出力してくれる。

逆に、コンフィグファイルを入力するときは下記。

   -load-config ./config.xml


【Flex】Flexプロジェクトの ant の色々【Ant】

2010-07-04 17:46:09 Sun

Flexプロジェクトや Flexライブラリプロジェクトの ant について色々と調べたのでメモ。

なお、ant だけであればバージョン差異には悩まされていないが、Flex SDK は Flex 4.0 を使用しているので、Flex 3.X 環境ではプロジェクトソースをそのままコピーすると動作しないことに注意。

参考URL
http://code.google.com/p/flexughh/source/browse/trunk/meetings/flexunit_081208/ant/flex/?r=14

やりたいこと

Flexライブラリプロジェクトの成果物である hoge.swc をコンパイルし、これを参照しつつFlexプロジェクトの成果物である hoge.swf をコンパイルすること。

※注釈
Flexプロジェクト・・・Flexのメインアプリケーションを作成するプロジェクト。SWFを成果物とする。下記では、MainApp がこれに該当。
Flexライブラリプロジェクト・・・Flexのライブラリを作成するプロジェクト。SWCを成果物とする。下記では、 SubLibrary がこれに該当。

workspace
├─MainApp
│  │  .actionScriptProperties
│  │  .flexProperties
│  │  .project
│  │  build.properties
│  │  build.xml
│  │  mxmlc-config.xml
│  │  
│  ├─.settings
│  │      org.eclipse.core.resources.prefs
│  │      
│  ├─bin-debug
│  │  │  config.xml
│  │  │  framework_4.0.0.14159.swf
│  │  │  MainApp.html
│  │  │  MainApp.swf
│  │  │  osmf_flex.4.0.0.13495.swf
│  │  │  playerProductInstall.swf
│  │  │  rpc_4.0.0.14159.swf
│  │  │  sparkskins_4.0.0.14159.swf
│  │  │  spark_4.0.0.14159.swf
│  │  │  swfobject.js
│  │  │  textLayout_1.0.0.595.swf
│  │  │  
│  │  └─history
│  │          history.css
│  │          history.js
│  │          historyFrame.html
│  │          
│  ├─bin-release
│  │  │  framework_4.0.0.14159.swz
│  │  │  MainApp.html
│  │  │  MainApp.swf
│  │  │  osmf_flex.4.0.0.13495.swz
│  │  │  playerProductInstall.swf
│  │  │  rpc_4.0.0.14159.swz
│  │  │  sparkskins_4.0.0.14159.swz
│  │  │  spark_4.0.0.14159.swz
│  │  │  swfobject.js
│  │  │  textLayout_1.0.0.595.swz
│  │  │  
│  │  └─history
│  │          history.css
│  │          history.js
│  │          historyFrame.html
│  │          
│  ├─html-template
│  │  │  index.template.html
│  │  │  playerProductInstall.swf
│  │  │  swfobject.js
│  │  │  
│  │  └─history
│  │          history.css
│  │          history.js
│  │          historyFrame.html
│  │          
│  ├─libs
│  ├─src
│  │      MainApp.mxml
│  │      
│  └─target
│      └─bin
│          │  MainApp.swf
│          │  MainApp.swf.cache
│          │  playerProductInstall.swf
│          │  swfobject.js
│          │  
│          └─history
│                  history.css
│                  history.js
│                  historyFrame.html
│                  
└─SubLibrary
    │  .actionScriptProperties
    │  .flexLibProperties
    │  .project
    │  build.xml
    │  swc-config.xml
    │  
    ├─.settings
    │      org.eclipse.core.resources.prefs
    │      
    ├─bin
    │      SubLibrary.swc
    │      
    └─src
        │  manifest.xml
        │  
        └─com
            └─development
                └─labs
                        CustomComponent.mxml
                        


WS000010_20100704170619.jpg

各プロジェクトは上記のようなイメージ。

WS000011_20100704170823.jpg

FlexプロジェクトからFlexライブラリプロジェクトへビルドパス参照を追加しておく。
このとき、「SWC フォルダーの追加」ではうまくいかなかったので、「SWC の追加」にするとうまくいった。

WS000012_20100704171116.jpg

Flexライブラリプロジェクトでは、Flex ライブラリコンパイラーの名前空間、マニフェストファイルを設定しておくこと。


<componentPackage>
    <!-- Controls -->
    <!-- Containers -->
    <component class="com.development.labs.CustomComponent" id="CustomComponent" uri="http://sublibrary.com/"  />
</componentPackage>


Flexライブラリプロジェクトのマニフェストファイルは上記。

ここでは src フォルダ直下に manifest.xml ファイルを上記内容で作成。

Flexライブラリプロジェクトの MXMLコンポーネントのパッケージは「com.development.labs」、クラス名は「CustomComponent」、FQCNでは「com.development.labs.CustomComponent」となる。

<?xml version="1.0" encoding="utf-8"?>
<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009" 
		 xmlns:s="library://ns.adobe.com/flex/spark" 
		 xmlns:mx="library://ns.adobe.com/flex/mx" width="124" height="46">
	<s:layout>
		<s:BasicLayout/>
	</s:layout>
	<fx:Declarations>
		<!-- 非ビジュアルエレメント (サービス、値オブジェクトなど) をここに配置 -->
	</fx:Declarations>
	<s:CheckBox x="10" y="4" label="ヘッダ部品"/>
</s:Group>



Flexプロジェクトの MXMLアプリケーションのパッケージはデフォルトパッケージ(パッケージなし)、クラス名は「MainApp」、FQCNでは「MainApp」となる。

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
			   xmlns:s="library://ns.adobe.com/flex/spark" 
			   xmlns:mx="library://ns.adobe.com/flex/mx" 
			   xmlns:sub="http://sublibrary.com/"
			   minWidth="955" 
			   minHeight="600">
	<fx:Declarations>
		<!-- 非ビジュアルエレメント (サービス、値オブジェクトなど) をここに配置 -->
	</fx:Declarations>
	<sub:CustomComponent id="hogehoge"/>
	<mx:DataGrid x="19" y="70">
		<mx:columns>
			<mx:DataGridColumn headerText="列 1" dataField="col1"/>
			<mx:DataGridColumn headerText="列 2" dataField="col2"/>
			<mx:DataGridColumn headerText="列 3" dataField="col3"/>
		</mx:columns>
	</mx:DataGrid>
</s:Application>


これでお膳立てができた。

あとは、build.xml を記述していく。

まずは、Flexライブラリプロジェクトから。

○./SubLibrary/build.xml

<?xml version="1.0"?>
<project name="SubLibrary" default="build" >

	<property file="../MainApp/build.properties" />
	
	<taskdef resource="flexTasks.tasks" classpath="${FLEX_ANT_TASK}/flexTasks.jar" />
	
	<dirname property="SubLibrary.home" file="${ant.file}" />

	<fileset id="SubLibrary.src.files.id" dir="${SubLibrary.home}/src" >
		<include name="**/*.as" />
		<include name="**/*.mxml" />
	</fileset>
	
	<pathconvert property="SubLibrary.src.files" pathsep=" " refid="SubLibrary.src.files.id" >
		<compositemapper>
			<chainedmapper>
				<globmapper from="${SubLibrary.home}/src/*" to="*" handledirsep="true" /><!-- ここのfromが相対パスだとなぜかうまくいかない -->
				<mapper type="package" from="*.as" to="*" />
			</chainedmapper>
			<chainedmapper>
				<globmapper from="${SubLibrary.home}/src/*" to="*" handledirsep="true" /><!-- ここのfromが相対パスだとなぜかうまくいかない -->
				<mapper type="package" from="*.mxml" to="*" />
			</chainedmapper>
		</compositemapper>
	</pathconvert>
	
	<target name="build" depends="init">

		<compc output="${SubLibrary.home}/bin/SubLibrary.swc" compute-digest="true" directory="false" include-classes="${SubLibrary.src.files}">
			<load-config filename="${FLEX_HOME}/frameworks/flex-config.xml" />
			<load-config filename="${SubLibrary.home}/swc-config.xml" />
		</compc>

	</target>
	
	<target name="init">
		
		<delete dir="${SubLibrary.home}/bin" />
		
		<mkdir dir="${SubLibrary.home}/bin" />
		
	</target>
	
</project>


pathconvert で compc コマンドの include-classes の値をうまくとってきている。

ただ、pathconvert 内で使用している globmapper の from を相対パスにするとうまくコンパイル対象のソースファイルが取得できない。

仕方ないので、dirnameタスク と 変数 ${ant.file} (実行されている build.xml ファイルのパス)をうまく使って絶対パス指定をしている。(この記述で、antタスクなどで呼ばれてきたとき、実行している build.xml の格納されているディレクトリパスを取得できる。)

	<dirname property="SubLibrary.home" file="${ant.file}" />


○./SubLibrary/swc-config.xml

<?xml version="1.0" encoding="Shift_JIS"?>
<flex-config>
   <!-- benchmark: パフォーマンスベンチマークを出力します-->
   <!-- benchmark usage:
   <benchmark>boolean</benchmark>
   -->
   <compiler>
      <!-- compiler.accessible: アクセス可能な SWF を生成します-->
      <accessible>false</accessible>
      <!-- compiler.actionscript-file-encoding: ActionScript ファイルのエンコーディングを指定します。AS3 ソースファイルに BOM がない場合、コンパイラーはこのファイルエンコーディングを使用します。-->
      <!-- compiler.actionscript-file-encoding usage:
      <actionscript-file-encoding>string</actionscript-file-encoding>
      -->
      <!-- compiler.allow-source-path-overlap: source-path エントリが別の source-path エントリのサブディレクトリであるかどうかを確認します。これにより、MXML コンポーネントのパッケージ名が明白になります。-->
      <allow-source-path-overlap>false</allow-source-path-overlap>
      <!-- compiler.as3: パフォーマンスを向上させ、エラー報告機能を強化するには、ActionScript 3 クラスに基づくオブジェクトモデルを使用してください。クラスに基づくオブジェクトモデルでは、ほとんどの組み込み関数はクラスの固定メソッドとして実装されます。-->
      <as3>true</as3>
      <!-- compiler.context-root: サービスチャンネルのエンドポイントの {context.root} トークンを置き換えるパス-->
      <!-- compiler.context-root usage:
      <context-root>context-path</context-root>
      -->
      <!-- compiler.debug: デバッグに適したムービーを生成します-->
      <debug>true</debug>
      <!-- compiler.defaults-css-files usage:
      <defaults-css-files>
         <filename>string</filename>
         <filename>string</filename>
      </defaults-css-files>
      -->
      <!-- compiler.defaults-css-url: デフォルトのスタイルシートの場所を定義します。このオプションを設定すると、 framework.swc ファイルにある defaults.css スタイルシートの暗黙的な使用がオーバーライドされます。-->
      <!-- compiler.defaults-css-url usage:
      <defaults-css-url>string</defaults-css-url>
      -->
      <!-- compiler.define: グローバル AS3 条件コンパイル定義を定義します (-define CONFIG::debugging tru、 または flex-config.xml 内の既存の定義に追加する場合の -define+=CONFIG::debugging,true など)-->
      <!-- compiler.define usage:
      <define>
         <name>string</name>
         <value>string</value>
         <value>string</value>
      </define>
      -->
      <!-- compiler.enable-runtime-design-layers usage:
      <enable-runtime-design-layers>boolean</enable-runtime-design-layers>
      -->
      <!-- compiler.es: プロトタイププロパティを動的にオーバーライドできるようにするには、ECMAScript Edition 3 のプロトタイプに基づくオブジェクトモデルを使用してください。プロトタイプに基づくオブジェクトモデルでは、組み込み関数はプロトタイプオブジェクトの動的プロパティとして実装されます。-->
      <es>false</es>
      <extensions>
         <!-- compiler.extensions.extension usage:
         <extension>
            <extension>string</extension>
            <parameters>string</parameters>
         </extension>
         -->
      </extensions>
      <!-- compiler.external-library-path: コンパイル対象であるが、リンクからは除外される SWC ファイルまたはディレクトリの一覧-->
      <external-library-path>
         <path-element>${FLEX_HOME}/frameworks/libs/player/10.0/playerglobal.swc</path-element>
         <path-element>${FLEX_HOME}/frameworks/libs/textLayout.swc</path-element>
         <path-element>${FLEX_HOME}/frameworks/libs/osmf.swc</path-element>
         <path-element>${FLEX_HOME}/frameworks/libs/framework.swc</path-element>
         <path-element>${FLEX_HOME}/frameworks/libs/spark.swc</path-element>
         <path-element>${FLEX_HOME}/frameworks/libs/sparkskins.swc</path-element>
         <path-element>${FLEX_HOME}/frameworks/libs/rpc.swc</path-element>
      </external-library-path>
      <fonts>
         <!-- compiler.fonts.advanced-anti-aliasing: 埋め込みフォントの高度なアンチエイリアスを有効にして、小さいフォントを見やすくします。-->
         <advanced-anti-aliasing>true</advanced-anti-aliasing>
         <!-- compiler.fonts.flash-type: 埋め込みフォントの FlashType を有効にして、小さいフォントを見やすくする-->
         <!-- compiler.fonts.flash-type usage:
         <flash-type>boolean</flash-type>
         -->
         <languages>
            <!-- compiler.fonts.languages.language-range: SWF に埋め込まれるフォントグリフの数を制限する範囲-->
            <!-- compiler.fonts.languages.language-range usage:
            <language-range>
               <lang>string</lang>
               <range>string</range>
               <range>string</range>
            </language-range>
            -->
         </languages>
         <!-- compiler.fonts.local-font-paths usage:
         <local-font-paths>
            <path-element>string</path-element>
            <path-element>string</path-element>
         </local-font-paths>
         -->
         <!-- compiler.fonts.local-fonts-snapshot: このファイルには、flex2.tools.FontSnapshot によって生成されたシステムフォントデータが含まれています。-->
         <local-fonts-snapshot>${flexlib}/winFonts.ser</local-fonts-snapshot>
         <!-- compiler.fonts.managers: コンパイラーのフォントマネージャークラス、ポリシーの解決順-->
         <managers>
            <manager-class>flash.fonts.JREFontManager</manager-class>
            <manager-class>flash.fonts.BatikFontManager</manager-class>
            <manager-class>flash.fonts.AFEFontManager</manager-class>
            <manager-class>flash.fonts.CFFFontManager</manager-class>
         </managers>
         <!-- compiler.fonts.max-cached-fonts: サーバーのキャッシュに保存するフォントの最大数を設定します。デフォルト値は 20 です。-->
         <max-cached-fonts>20</max-cached-fonts>
         <!-- compiler.fonts.max-glyphs-per-face: 各フォントについてサーバーにキャッシュできる文字のグリフアウトラインの最大数を設定します。デフォルト値は 1000 です。-->
         <max-glyphs-per-face>1000</max-glyphs-per-face>
      </fonts>
      <!-- compiler.headless-server: Flex がディスプレイなしのサーバーで実行されている場合に設定されるフラグ-->
      <!-- compiler.headless-server usage:
      <headless-server>boolean</headless-server>
      -->
      <!-- compiler.include-libraries: SWF に完全にインクルードされるライブラリ (SWC) の一覧-->
      <!-- compiler.include-libraries usage:
      <include-libraries>
         <library>string</library>
         <library>string</library>
      </include-libraries>
      -->
      <!-- compiler.incremental: インクリメンタルコンパイルを有効にします-->
      <!-- compiler.incremental usage:
      <incremental>boolean</incremental>
      -->
      <!-- compiler.isolate-styles: コンパイル後のアプリケーションまたはモジュールは、それ自身および自身の子に影響するスタイルのみを設定できます-->
      <!-- compiler.isolate-styles usage:
      <isolate-styles>boolean</isolate-styles>
      -->
      <!-- compiler.keep-all-type-selectors: 使用されていない CSS タイプセレクターの削除を無効にします-->
      <!-- compiler.keep-all-type-selectors usage:
      <keep-all-type-selectors>boolean</keep-all-type-selectors>
      -->
      <!-- compiler.keep-as3-metadata: SWF 内に指定されたメタデータを保持する-->
      <!-- compiler.keep-as3-metadata usage:
      <keep-as3-metadata>
         <name>string</name>
         <name>string</name>
      </keep-as3-metadata>
      -->
      <!-- compiler.keep-generated-actionscript: MXML コンパイル時に生成された一時ソースファイルを保存します-->
      <keep-generated-actionscript>false</keep-generated-actionscript>
      <!-- compiler.library-path: SWC ファイルまたは SWC ファイルを格納するディレクトリの一覧-->
      <library-path>
         <path-element>${FLEX_HOME}/frameworks/libs/datavisualization.swc</path-element>
         <path-element>${FLEX_HOME}/frameworks/libs/flash-integration.swc</path-element>
         <path-element>${FLEX_HOME}/frameworks/libs/utilities.swc</path-element>
         <path-element>${FLEX_HOME}/frameworks/locale/{locale}</path-element>
      </library-path>
      <!-- compiler.locale: 国際化用にロケールを指定します-->
      <locale>
         <locale-element>ja_JP</locale-element>
      </locale>
      <!-- compiler.minimum-supported-version usage:
      <minimum-supported-version>string</minimum-supported-version>
      -->
      <mxml>
         <!-- compiler.mxml.compatibility-version: 互換性のあるバージョンを指定します (compatibility-version=2.0.1 など)-->
         <!-- compiler.mxml.compatibility-version usage:
         <compatibility-version>version</compatibility-version>
         -->
         <!-- compiler.mxml.minimum-supported-version usage:
         <minimum-supported-version>string</minimum-supported-version>
         -->
         <!-- compiler.mxml.qualified-type-selectors usage:
         <qualified-type-selectors>boolean</qualified-type-selectors>
         -->
      </mxml>
      <namespaces>
         <!-- compiler.namespaces.namespace: MXML エレメントとして使用するためのコンポーネントのマニフェストに関連付ける URI を指定します-->
         <namespace>
            <uri>http://ns.adobe.com/mxml/2009</uri>
            <manifest>${FLEX_HOME}/frameworks/mxml-2009-manifest.xml</manifest>
         </namespace>
         <namespace>
            <uri>library://ns.adobe.com/flex/spark</uri>
            <manifest>${FLEX_HOME}/frameworks/spark-manifest.xml</manifest>
         </namespace>
         <namespace>
            <uri>library://ns.adobe.com/flex/mx</uri>
            <manifest>${FLEX_HOME}/frameworks/mx-manifest.xml</manifest>
         </namespace>
         <namespace>
            <uri>http://www.adobe.com/2006/mxml</uri>
            <manifest>${FLEX_HOME}/frameworks/mxml-manifest.xml</manifest>
         </namespace>
         <namespace>
            <uri>http://sublibrary.com/</uri>
            <manifest>../SubLibrary/src/manifest.xml</manifest>
         </namespace>
      </namespaces>
      <!-- compiler.omit-trace-statements: trace ステートメントを省略するかどうかを切り替えます-->
      <omit-trace-statements>true</omit-trace-statements>
      <!-- compiler.optimize: リンク後の SWF の最適化を有効にします-->
      <optimize>true</optimize>
      <!-- compiler.report-invalid-styles-as-warnings: 無効なスタイルを警告として報告します-->
      <!-- compiler.report-invalid-styles-as-warnings usage:
      <report-invalid-styles-as-warnings>boolean</report-invalid-styles-as-warnings>
      -->
      <!-- compiler.services: Flex データサービス設定ファイルへのパス-->
      <!-- compiler.services usage:
      <services>filename</services>
      -->
      <!-- compiler.show-actionscript-warnings: 有効であるが部分的に正しくないコードを検出するモードで AS3 コンパイラーを実行します-->
      <show-actionscript-warnings>true</show-actionscript-warnings>
      <!-- compiler.show-binding-warnings: データバインディングコードから生成される警告を表示するかどうかを切り替えます-->
      <show-binding-warnings>true</show-binding-warnings>
      <!-- compiler.show-invalid-css-property-warnings: 無効な CSS プロパティに関する警告を報告するかどうかを切り替えます-->
      <!-- compiler.show-invalid-css-property-warnings usage:
      <show-invalid-css-property-warnings>boolean</show-invalid-css-property-warnings>
      -->
      <!-- compiler.show-shadowed-device-font-warnings: 埋め込みフォント名がデバイスフォント名に影響する場合に、警告を表示するかどうかを切り替えます-->
      <show-shadowed-device-font-warnings>false</show-shadowed-device-font-warnings>
      <!-- compiler.show-unused-type-selector-warnings: 使用されていない CSS タイプセレクターから生成される警告を表示するかどうかを切り替えます-->
      <show-unused-type-selector-warnings>true</show-unused-type-selector-warnings>
      <!-- compiler.source-path: ActionScript クラス階層のルートを形成するパスエレメントの一覧-->
      <source-path>
         <path-element>../SubLibrary/src</path-element>
      </source-path>
      <!-- compiler.strict: 厳密なエラーチェックモードで AS3 コンパイラーを実行します-->
      <strict>true</strict>
      <!-- compiler.theme: テーマとして適用する CSS または SWC ファイルの一覧-->
      <theme>
         <filename>${FLEX_HOME}/frameworks/themes/Spark/spark.css</filename>
      </theme>
      <!-- compiler.use-resource-bundle-metadata: リソースバンドルがアプリケーションに含まれているかどうかを調べます。-->
      <use-resource-bundle-metadata>false</use-resource-bundle-metadata>
      <!-- compiler.verbose-stacktraces: デバッグ用にコールスタック情報を SWF に保存します-->
      <verbose-stacktraces>false</verbose-stacktraces>
      <!-- compiler.warn-array-tostring-changes: Array.toString() フォーマットは変更されました。-->
      <warn-array-tostring-changes>false</warn-array-tostring-changes>
      <!-- compiler.warn-assignment-within-conditional: 条件内の代入です。-->
      <warn-assignment-within-conditional>true</warn-assignment-within-conditional>
      <!-- compiler.warn-bad-array-cast: 無効な Array キャスト演算である可能性があります。-->
      <warn-bad-array-cast>true</warn-bad-array-cast>
      <!-- compiler.warn-bad-bool-assignment: ブール値が必要ですが、非ブール値が使用されています。-->
      <warn-bad-bool-assignment>true</warn-bad-bool-assignment>
      <!-- compiler.warn-bad-date-cast: 無効な Date キャスト演算です。-->
      <warn-bad-date-cast>true</warn-bad-date-cast>
      <!-- compiler.warn-bad-es3-type-method: 不明なメソッドです。-->
      <warn-bad-es3-type-method>true</warn-bad-es3-type-method>
      <!-- compiler.warn-bad-es3-type-prop: 不明なプロパティです。-->
      <warn-bad-es3-type-prop>true</warn-bad-es3-type-prop>
      <!-- compiler.warn-bad-nan-comparison: NaN の比較が無効です。NaN を含む比較処理は、NaN != NaN となるため false になります。-->
      <warn-bad-nan-comparison>true</warn-bad-nan-comparison>
      <!-- compiler.warn-bad-null-assignment: null に代入できません。-->
      <warn-bad-null-assignment>true</warn-bad-null-assignment>
      <!-- compiler.warn-bad-null-comparison: null の比較が無効です。-->
      <warn-bad-null-comparison>true</warn-bad-null-comparison>
      <!-- compiler.warn-bad-undefined-comparison: undefined の比較が非論理的です。型が指定されていない変数 (または * 型の変数) のみ undefined にすることができます。-->
      <warn-bad-undefined-comparison>true</warn-bad-undefined-comparison>
      <!-- compiler.warn-boolean-constructor-with-no-args: Boolean() を引数なしで呼び出すと、ActionScript 3.0 では false が返されます。ActionScript 2.0 では Boolean() に undefined が返されていました。-->
      <warn-boolean-constructor-with-no-args>false</warn-boolean-constructor-with-no-args>
      <!-- compiler.warn-changes-in-resolve: __resolve はサポートされなくなりました。-->
      <warn-changes-in-resolve>false</warn-changes-in-resolve>
      <!-- compiler.warn-class-is-sealed: クラスは sealed です。このクラスにメンバーを動的に追加することはできません。-->
      <warn-class-is-sealed>true</warn-class-is-sealed>
      <!-- compiler.warn-const-not-initialized: 定数が初期化されていません。-->
      <warn-const-not-initialized>true</warn-const-not-initialized>
      <!-- compiler.warn-constructor-returns-value: new 式で使用されている関数は値を返します。結果は、関数の新しいインスタンスではなく、その関数の戻り値になります。-->
      <warn-constructor-returns-value>false</warn-constructor-returns-value>
      <!-- compiler.warn-deprecated-event-handler-error: EventHandler がリスナーとして追加されていません。-->
      <warn-deprecated-event-handler-error>false</warn-deprecated-event-handler-error>
      <!-- compiler.warn-deprecated-function-error: サポートされていない ActionScript 2.0 の関数です。-->
      <warn-deprecated-function-error>true</warn-deprecated-function-error>
      <!-- compiler.warn-deprecated-property-error: サポートされていない ActionScript 2.0 のプロパティです。-->
      <warn-deprecated-property-error>true</warn-deprecated-property-error>
      <!-- compiler.warn-duplicate-argument-names: 同じ名前の引数が複数あります。-->
      <warn-duplicate-argument-names>true</warn-duplicate-argument-names>
      <!-- compiler.warn-duplicate-variable-def: 変数の定義が重複しています -->
      <warn-duplicate-variable-def>true</warn-duplicate-variable-def>
      <!-- compiler.warn-for-var-in-changes: ActionScript 3.0 では、オブジェクトのプロパティを "for x in target" ステートメント内でランダムな順番で繰り返し処理します。-->
      <warn-for-var-in-changes>false</warn-for-var-in-changes>
      <!-- compiler.warn-import-hides-class: 現在のクラスと同じ名前でパッケージをインポートすると、このスコープ内のクラス識別子が非表示になります。-->
      <warn-import-hides-class>true</warn-import-hides-class>
      <!-- compiler.warn-instance-of-changes: instanceof 演算子を使用します。-->
      <warn-instance-of-changes>true</warn-instance-of-changes>
      <!-- compiler.warn-internal-error: コンパイラーの内部エラーです。-->
      <warn-internal-error>true</warn-internal-error>
      <!-- compiler.warn-level-not-supported: _level はサポートされなくなりました。詳細については、flash.display パッケージを参照してください。-->
      <warn-level-not-supported>true</warn-level-not-supported>
      <!-- compiler.warn-missing-namespace-decl: 名前空間の宣言がありません (変数が public や private などに定義されていません)。-->
      <warn-missing-namespace-decl>true</warn-missing-namespace-decl>
      <!-- compiler.warn-negative-uint-literal: 負の値を uint データ型に割り当てると、大きい正の値になります。-->
      <warn-negative-uint-literal>true</warn-negative-uint-literal>
      <!-- compiler.warn-no-constructor: コンストラクターが見つかりません。-->
      <warn-no-constructor>false</warn-no-constructor>
      <!-- compiler.warn-no-explicit-super-call-in-constructor: super() ステートメントがコンストラクター内で呼び出されませんでした。-->
      <warn-no-explicit-super-call-in-constructor>false</warn-no-explicit-super-call-in-constructor>
      <!-- compiler.warn-no-type-decl: 型宣言がありません。-->
      <warn-no-type-decl>true</warn-no-type-decl>
      <!-- compiler.warn-number-from-string-changes: ActionScript 3.0 では、空白文字は無視され、'' は 0 を返します。ActionScript 2.0 では、パラメーターが '' であるか空白文字を含む場合に、Number() は NaN を返します。-->
      <warn-number-from-string-changes>false</warn-number-from-string-changes>
      <!-- compiler.warn-scoping-change-in-this: this キーワードのスコープが変更されました。クラスのインスタンスから抽出したクラスメソッドでは、this で常にそのインスタンスを参照します。ActionScript 2.0 では、メソッドを呼び出した場所に基づいて this を動的に参照します。-->
      <warn-scoping-change-in-this>false</warn-scoping-change-in-this>
      <!-- compiler.warn-slow-text-field-addition: TextField で += を使用するのは効果的ではありません。-->
      <warn-slow-text-field-addition>true</warn-slow-text-field-addition>
      <!-- compiler.warn-unlikely-function-value: 括弧がない可能性があります。-->
      <warn-unlikely-function-value>true</warn-unlikely-function-value>
      <!-- compiler.warn-xml-class-has-changed: ActionScript 2.0 XML クラスを使用している可能性があります。-->
      <warn-xml-class-has-changed>false</warn-xml-class-has-changed>
   </compiler>
   <!-- compute-digest: ライブラリの catalog.xml にダイジェストを書き込みます。ライブラリがドメイン間の rsl として使用されるときには、これを使用します。-->
   <!-- compute-digest usage:
   <compute-digest>boolean</compute-digest>
   -->
   <!-- debug-password: デバッグ可能な SWF に含めるパスワード-->
   <!-- debug-password usage:
   <debug-password>string</debug-password>
   -->
   <!-- default-background-color: デフォルトの背景色 (アプリケーションコードによってオーバーライドされる場合があります)-->
   <default-background-color>0xFFFFFF</default-background-color>
   <!-- default-frame-rate: SWF で使用する既定のフレームレート。-->
   <default-frame-rate>24</default-frame-rate>
   <!-- default-script-limits: デフォルトのスクリプト実行の制限 (ルート属性によってオーバーライドされます)-->
   <default-script-limits>
      <max-recursion-depth>1000</max-recursion-depth>
      <max-execution-time>60</max-execution-time>
   </default-script-limits>
   <!-- default-size: デフォルトのアプリケーションサイズ (アプリケーションのルート属性によってオーバーライドされます)-->
   <default-size>
      <width>500</width>
      <height>375</height>
   </default-size>
   <!-- directory: SWC ファイルではなくオープンディレクトリとしてライブラリを出力します-->
   <!-- directory usage:
   <directory>boolean</directory>
   -->
   <!-- externs: SWF の構築時にリンク対象から除外するシンボルの一覧-->
   <!-- externs usage:
   <externs>
      <symbol>string</symbol>
      <symbol>string</symbol>
   </externs>
   -->
   <frames>
      <!-- frames.frame: フレームにリンクされる一連のクラス名を含む SWF フレームラベル。-->
      <!-- frames.frame usage:
      <frame>
         <label>string</label>
         <classname>string</classname>
      </frame>
      -->
   </frames>
   <framework>halo</framework>
   <!-- include-classes: 出力 SWC に含めるクラスの一覧-->
   <!-- include-classes usage:
   <include-classes>
      <class>string</class>
      <class>string</class>
   </include-classes>
   -->
   <!-- include-file: 出力 SWC に含める名前付きファイルの一覧-->
   <!-- include-file usage:
   <include-file>
      <name>string</name>
      <path>string</path>
      <path>string</path>
   </include-file>
   -->
   <include-file>
      <name>Manifest.xml</name>
      <path>../SubLibrary/src/manifest.xml</path>
   </include-file>
   <!-- include-lookup-only: true の場合、lookupOnly=true のマニフェストエントリが SWC カタログに含まれます。デフォルトは false です。-->
   <!-- include-lookup-only usage:
   <include-lookup-only>boolean</include-lookup-only>
   -->
   <!-- include-namespaces: リストされている名前空間内のすべてのクラスが出力 SWC に含まれます-->
   <!-- include-namespaces usage:
   <include-namespaces>
      <uri>string</uri>
      <uri>string</uri>
   </include-namespaces>
   -->
   <include-namespaces>
		<uri>http://sublibrary.com/</uri>
   </include-namespaces>
   <!-- include-resource-bundles: 出力 SWC に含めるリソースバンドルの一覧-->
   <!-- include-resource-bundles usage:
   <include-resource-bundles>
      <bundle>string</bundle>
      <bundle>string</bundle>
   </include-resource-bundles>
   -->
   <!-- include-sources: 出力 SWC に含めるディレクトリとソースファイルの一覧-->
   <!-- include-sources usage:
   <include-sources>
      <path-element>string</path-element>
      <path-element>string</path-element>
   </include-sources>
   -->
   <!-- include-stylesheet: 出力 SWC に含める名前付きスタイルシートリソースの一覧-->
   <!-- include-stylesheet usage:
   <include-stylesheet>
      <name>string</name>
      <path>string</path>
      <path>string</path>
   </include-stylesheet>
   -->
   <!-- includes: SWF ファイル作成時に常にリンクされるシンボルの一覧です-->
   <!-- includes usage:
   <includes>
      <symbol>string</symbol>
      <symbol>string</symbol>
   </includes>
   -->
   <!-- link-report: アプリケーションにリンクされるすべての定義に関する XML 形式のレポートを出力します。-->
   <!-- link-report usage:
   <link-report>filename</link-report>
   -->
   <!-- load-config: 設定オプションを含むファイルをロードします-->
   <load-config>${flexlib}/${configname}-config.xml</load-config>
   <!-- load-externs: SWF の構築時にリンク対象から除外する <def>、<pre>、および <ext> シンボルを含む XML ファイル-->
   <!-- load-externs usage:
   <load-externs>filename</load-externs>
   -->
   <metadata>
      <!-- metadata.contributor: SWF メタデータに保存されている投稿者の名前-->
      <!-- metadata.contributor usage:
      <contributor>name</contributor>
      -->
      <!-- metadata.creator: SWF メタデータに保存されている作成者の名前-->
      <creator>unknown</creator>
      <!-- metadata.date: SWF メタデータに保存されている作成日-->
      <!-- metadata.date usage:
      <date>text</date>
      -->
      <!-- metadata.description: SWF メタデータに保存されているデフォルトの説明-->
      <description>http://www.adobe.com/products/flex</description>
      <!-- metadata.language: SWF メタデータに保存されている言語 (EN、FR など)-->
      <language>EN</language>
      <!-- metadata.localized-description: SWF メタデータに保存されているローカライズされた RDF/XMP の説明-->
      <!-- metadata.localized-description usage:
      <localized-description>
         <text>string</text>
         <lang>string</lang>
         <lang>string</lang>
      </localized-description>
      -->
      <!-- metadata.localized-title: SWF メタデータに保存されているローカライズされた RDF/XMP タイトル-->
      <!-- metadata.localized-title usage:
      <localized-title>
         <title>string</title>
         <lang>string</lang>
         <lang>string</lang>
      </localized-title>
      -->
      <!-- metadata.publisher: SWF メタデータに保存されている発行者の名前-->
      <publisher>unknown</publisher>
      <!-- metadata.title: SWF メタデータに保存されているデフォルトのタイトル-->
      <title>Adobe Flex 4 Application</title>
   </metadata>
   <!-- output: 作成する SWF ムービーのファイル名-->
   <!-- output usage:
   <output>filename</output>
   -->
   <!-- raw-metadata: SWF メタデータに保存されている XML テキスト (metadata.* の設定をオーバーライドします)-->
   <!-- raw-metadata usage:
   <raw-metadata>text</raw-metadata>
   -->
   <!-- resource-bundle-list: リソースバンドルの SWC ファイルを生成するために compc コンパイラーに入力するリソースバンドルのリストをファイルに出力します。 -->
   <!-- resource-bundle-list usage:
   <resource-bundle-list>filename</resource-bundle-list>
   -->
   <!-- runtime-shared-libraries: アプリケーションが起動する前にロードされるランタイム共有ライブラリの URL の一覧-->
   <!-- runtime-shared-libraries usage:
   <runtime-shared-libraries>
      <url>string</url>
      <url>string</url>
   </runtime-shared-libraries>
   -->
   <!-- runtime-shared-library-path usage:
   <runtime-shared-library-path>
      <path-element>string</path-element>
      <rsl-url>string</rsl-url>
      <policy-file-url>string</policy-file-url>
   </runtime-shared-library-path>
   -->
   <!-- static-link-runtime-shared-libraries: ドメイン間の rsl によって指定されたライブラリを静的にリンクします。-->
   <static-link-runtime-shared-libraries>false</static-link-runtime-shared-libraries>
   <!-- target-player: アプリケーションがターゲットとするプレーヤーのバージョンを指定します。より新しいバージョンを必要とする機能は、アプリケーションにコンパイルされません。サポートされる最小の値は「9.0.0」です。-->
   <target-player>10.0.0</target-player>
   <!-- tools-locale: エラーと警告を通知する際にコンパイラーで使用するロケールを指定します。-->
   <!-- tools-locale usage:
   <tools-locale>string</tools-locale>
   -->
   <!-- use-network: ネットワークリソースへのアクセスについて SWF にフラグを設定するかどうかを切り替えます-->
   <use-network>true</use-network>
   <!-- verify-digests: 実行時にロードされたライブラリが正しいことを確認します。-->
   <verify-digests>false</verify-digests>
   <!-- version: プログラムのビルドバージョンを表示します-->
   <!-- version usage:
   <version>boolean</version>
   -->
   <!-- warnings: 警告の表示を切り替えます-->
   <!-- warnings usage:
   <warnings>boolean</warnings>
   -->
</flex-config>


compc コマンドでロードするコンフィグファイルの設定。

このとき、変数が使えないものかと苦心したのだけれど、「${FLEX_HOME}」は使えて、その他は使えなかった。

何か決まりごとがあるのかしら?

知っている方、教えて欲しいです。

そうじゃないと、相対パスだったり、絶対パスだったりをイチイチ記述しないといけないです。

また、include-namespaces で定義した namespace の uri を指定すること。

そうじゃないと、Flexプロジェクトのコンパイル時に、名前空間が未定義になってしまい、ライブラリ参照が解決できなくなってしまいます。

more...


【Flex】ライブラリプロジェクトとViewStack

2010-05-24 02:06:03 Mon

ライブラリプロジェクトとViewStack を利用して、
アプリの保守性を考えた形を模倣してみました。

基本的にはこの形は人のアイデアです。。。

下図にもありますが、プロジェクトはとりあえず3つ。
○FlexMainApps・・・FlexのMXMLアプリケーションファイルを有するプロジェクト。SWFを作成する。
○FlexApp001 ・・・FlexのMXMLコンポーネントファイルを有するプロジェクト。SWCを作成する。
○FlexApp002 ・・・FlexのMXMLコンポーネントファイルを有するプロジェクト。SWCを作成する。

WS000138.jpg

FlexMainAppsプロジェクトのMXMLアプリケーションにViewStackを定義する。

FlexApp001プロジェクトのMXMLコンポーネントファイルのベースをCanvasとし、
FlexApp001プロジェクトにおける主たるMXMLコンポーネントファイルにViewStackを定義する。

FlexApp001プロジェクトのMXMLコンポーネント(ベースはCanvas)にそれぞれ画面を作成し、
このMXMLコンポーネントをFlexApp001プロジェクトにおける主たるMXMLコンポーネントファイルのViewStackで参照させる。

さらに、FlexApp001プロジェクトにおける主たるMXMLコンポーネントファイルをFlexMainAppsプロジェクトのMXMLアプリケーションのViewStackに参照させる。

メリットとしては、これにより、SWFファイルへコンパイルしたときのファイルサイズを調整しやすくなる。
ModuleLoader や SWFLoader と比較するとファイルサイズを変更し易いように思う。

以下、参考ソース。

FlexMainAppsプロジェクトのMXMLアプリケーション FlexMainApps.mxml
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:flexApp001="*"
	xmlns:flexApp002="*">

	<mx:Script>
		<![CDATA[
			
		]]>
	</mx:Script>
	
	<mx:ViewStack id="viewStack">
		<flexApp001:FlexApp001 />
		<flexApp002:FlexApp002 />
	</mx:ViewStack>
	
</mx:Application>


FlexApp001プロジェクトにおける主たるMXMLコンポーネントファイル FlexApp001.mxml
<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="400" height="300" xmlns:app001="*">
	<mx:ViewStack id="viewStack">
		<app001:View001 />
		<app001:View002 />
		<app001:View003 />
	</mx:ViewStack>
</mx:Canvas>


FlexApp001プロジェクトのMXMLコンポーネント(ベースはCanvas) View001.mxml
<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="400" height="300">
	<mx:Label id="label001" name="label" text="View001の画面です"/>
</mx:Canvas>


FlexApp001プロジェクトのMXMLコンポーネント(ベースはCanvas) View002.mxml
<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="400" height="300">
	<mx:Label id="label002" name="label" text="View002の画面です"/>
</mx:Canvas>


FlexApp001プロジェクトのMXMLコンポーネント(ベースはCanvas) View003.mxml
<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="400" height="300">
	<mx:Label id="label003" name="label" text="View003の画面です"/>
</mx:Canvas>


MXMLアプリケーションを有するプロジェクトのビルドパスは下記のように、
「プロジェクトの追加」よりライブラリプロジェクトを設定する。
WS000139.jpg

名言集
全記事(数)表示
全タイトルを表示
ブログ内検索
Loading