アクセス要素で定義されmxmlの外部からのとして
-
06-09-2019 - |
質問
いmxmlの形状により、内部では、TextInputs.ているのは嫌だと任意のコード内のmxmlのファイルからJavaScript形成)を使用していますので
mx:Script source="external.as"
タグを任意のコードを使用mxmlのファイルです。問題はしている場合はこのコードを external.as
ファイル:
private function populateFromForm():void{
var vo:ValidObject= new ValidObject();
vo.market = marketInput.text;
vo.segment = segmentInput.text;
vo.priceLow = priceLowInput.text;
vo.priceHigh = priceHighInput.text;
}
がmarketInput,segmentInput,priceLowInputとpriceHighInputはTextInputs定義されてmxmlのファイルです。しようcomplileを取得します 1120:アクセスを未定義の件○○○○
しかしこのライン前の機能:
public var marketInput:TextInput;
public var segmentInput:TextInput;
public var priceLowInput:TextInput;
public var priceHighInput:TextInput;
をいただくこともできましたか 1151:相反が存在すると定義XXXXに名前空間内 る最適です。
があるのではないこなすべての入力を参照としての機能のパラメータかしていただきたいと思います。
解決
「コードビハインド」を行うFlexで痛いです。部分クラスの概念やJavaScriptのように原型継承の柔軟性はありません。多くのリソースのための「フレックスでコードビハインド」のためのGoogleのます。
私はそれはあなたがMXMLのコードを埋め込むという考え方に慣れる方が良いと思います。できるだけ多くのインラインコードを回避するスクリプトタグを使用してください。あなたはMXML内の多くのコードを記述する必要がある場合は、おそらくあなたは、複数のカスタムコンポーネントにコードをファクタし直すこともできます。ボーナスポイントは、彼らが再利用可能である場合にます。
他のヒント
あなたはTextInputsの親コンテナのインスタンスへの参照を作成し、TextInputsとそのプロパティを_1アクセスするために、その参照を使用する必要があります。私たちはあなたのファイル構造上のいくつかの明確化が必要だと思います。どのように親コンテナのインスタンスを作成していますか?私は、これはあなたが何をする必要があるかであると思っています:
MyForm.mxmlます:
<?xml version="1.0" encoding="utf-8"?>
<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:TextInput id="marketInput" />
<mx:TextInput id="segmentInput" />
<mx:TextInput id="priceLowInput" />
<mx:TextInput id="priceHighInput" />
</mx:VBox>
SaveVOContainer.asます:
package
{
public class SaveVoContainer extends Container
{
private var myForm:MyForm = new MyForm();
public function SaveVOContainer
{
this.addChild(myForm);
}
private function populateFromForm():void{
var vo:ValidObject= new ValidObject();
vo.market = myForm.marketInput.text;
vo.segment = myForm.segmentInput.text;
vo.priceLow = myForm.priceLowInput.text;
vo.priceHigh = myForm.priceHighInput.text;
}
}
}
の標準的な方法でコードが遅フレックスすることができます。ここでの説明からのドキュメント: http://learn.adobe.com/wiki/display/Flex/Code+Behind.このように:
- を宣言するのActionScriptを利用するためのクラスと基底クラスです。
- セットの基底クラスの根付コンテナにおmxmlのファイルです。
- 任意の制御に宣言されておmxmlのファイルは、redeclareとして公共の基底クラスの同じ名前の意のままにやっては、上記のスクリプトにブロックソースのタグのみで作所:-)
なるほど、ActionScriptのファイル:
package mypackage
{
import mx.controls.TextInput;
public class myClass extends WindowedApplication
{
public var marketInput:TextInput;
private function populateFromForm():void{
/* As above */
}
}
}
に対応するmxmlのファイル:
<?xml version="1.0" encoding="utf-8"?>
<custom:myClass xmlns:custom="mypackage.*"
xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx">
<mx:TextInput id="marketInput"/>
</custom:myClass>
証のための他のTextInputます。現在おpopulateFromForm機能します。
このような凶悪なくてはredeclare同じ主体がいないのバッグを傷つけ早く回答したいとして使用することができるのですが可能なこの変更にフレックス4での苦悩を軽減りすることができます。
輸入す。:
import mx.core.Application;
できます。として使用す:
mx.core.Application.application.component.property = value;
mx.core.Application.application.myText.text = 'test';
あなたのActionScriptファイルを指すあなたのMXMLファイル内のスクリプトタグを持っていますか?
<mx:Script source='includes/foo.as' />