2011-07-25 19 views
5

includeディレクティブを使用してAS3に外部ファイルを含めるのと同じ方法で、MXMLファイルをMXMLファイルに含めたいとします。インクルード・ディレクティブを使用すると、外部ファイルのコードがコンパイル時に元のファイルに取り込まれ、同じスコープに配置されます。例えばMXMLファイルを別のMXMLファイルにインラインで含めるにはどうすればよいですか?

Application.mxml:

<Application> 

    <source="external.mxml"/> 

</Application> 

External.mxml:

<Styles/> 

<Declarations> 
    <Object id="test"/> 
</Declarations> 

私は外部にこのコード/ MXML/XMLを維持する必要がありますオリジナルの範囲内のファイル。なぜ私はこれをしたいのですか?

もう1つの例です。 ...

File1.mxml 
<Button click="clickHandler()"/> 

<Script> 
public function clickHandler():void { 

} 
</Script> 

...

ここで私が欲しいものである:ここでは、すべての1つのMXMLファイルで私の現在のコード(簡体字)がある

...

File1.mxml 
<Group> 

    <source="File2.mxml"/> 

    <Button click="clickHandler()"/> 

<Group> 


File2.mxml 
<Script> 
public function clickHandler():void { 
    trace(this); // File1.mxml 
} 
</Script> 

...

私は別のファイルに出て自分のコードを分割したい...

~~ 更新 ~~~~~~~~~~~~~~~~~~~~~~~~~~

「コードビハインド」スキームの使用を求めていたわけではありませんビューからコードを外すことに部分的な信用を得ています。そこで、MXMLファイルMyGroup.mxmlまたはMyGroup.asを作成し、clickHandlerコードを含むGroupを拡張します。

このメソッドの問題点は、私が拡張しているビューのタイプをロックして、ビューをハードコーディングすることです。たとえば、別のファイルに分割したいMXMLクラスがGroupの場合は、Groupを拡張する必要があります。

私はこれが行われたプロジェクトに取り組んできましたが、それは良くありません。人々はスタイルや視覚的なアスペクトの設定を開始したり、コードビハインドクラスの特定のプロパティをグループ化/表示したりします。後で変更する必要がある場合やレイアウトを変更すると、これらの依存性がコンテナに残ります。それは混乱になります。さらに、Code Behindを使用すると再利用できなくなります(styles.asが再利用されるような方法で再利用できます)。だからこれは解決策ではありませんが、私はそれを言及すると思った。ここ

は、例えば背後にあるコードである、

MyGroupBehind.mxml:

<Group> 

    <Script> 
    public function clickHandler():void { 
     trace(this); // File1.mxml 
    } 
    </Script> 

</Group> 

MyGroupAhead。MXML:

<MyGroupBehind> 

    <Button click="clickHandler()"/> 

</MyGroupBehind> 

答えて

1

だけではCtrl +スペースキーを押した後、カスタムコンポーネントの名前を入力し始めます。コード補完によって、コンポーネントの名前など、追加したい可能性のある項目のリストが作成されます。下矢印を使用してコンポーネントの名前を選択し、Enterを押します。コード補完により、名前空間が設定され、コンポーネントのタグが開始されます。あなたが行の最後に移動して "/>"(引用符なし)と入力すると、カスタムMXMLコンポーネントを表すインラインタグがあります。

+0

はい、それは文書内のコンポーネントのインスタンスを作成しますが、私はそれが同じスコープで同じ文書の一部であるかのように、それは外部のMXMLを治療する必要があります。たとえば、スクリプトタグ内にボタンとクリックハンドラを持つドキュメントがあるとします。そのクリックハンドラを別のmxmlファイルに配置したいと思います。 –

0

まず、外部mxmlは有効なXMLである必要があります。さて、限り、あなたは、有効なMXMLファイルを持っているとして、あなたは、単に以下のような名前で、それを追加します。

「外部」は、あなたのExternal.mxmlファイルの名前空間です
<Application> 
<external:External/> 
</Application> 

+0

-1:それはインスタンスを作成するだけです。 OPは、実際のコードをインラインで欲しいと思っています。 – merv

2

MXMLはコンパイラによってクラスに変換されるため、あなたが求めていることを行う方法はありません。

個人的には、それは良いことだと思います。ファイルを別々のファイルに分割することは、「より組織化された」ものにはなりません。実際、私はそれが正反対の効果を達成すると言います。あなたは、適切なコンポーネント構造IMHOに焦点を当てるほうがよいでしょう。

+1

私はそれがより組織化されていると私は適切なコンポーネントの構造を使用していると思います。 Adobeは公式のFlexコンポーネントで、私がやろうとしているものと同等のインクルードを使用しています。 –

+0

@gigawatts違いは、含まれているのは「クラスコード」ではないということです。一般的なスタイルや設定のようなものが含まれています。あなたがしようとしていることは、MXMLがコンパイルされた後にクラス内にコードが存在するため不可能です。あなたがそのコードを含めることができたとしても、それはあなたに望ましい効果(マージされた名前空間)を与えません。 – drkstr

+0

注目。 Flexコンパイラには、独自の埋め込み機能があります。私はこれを達成するために同様の指令があることを望んでいました。すべてのMXMLタグがクラス、宣言、メタデータ、スタイルなどに変換されるわけではありません –

-1

という名前のMXMLファイルがあります。これを親MXMLファイル内で呼び出すことで、これを使用したいと考えてください。

<views:Example/> 
+0

-1:それはインスタンスを作成するだけです。これは本質的に[@ M.D。(http://stackoverflow.com/a/6819692/570918)からの[等しく間違った答え]と同じであるため、私はそれを終了するようにフラグを立てています。 – merv

関連する問題