トップへ戻るニュースフォーラムFLASH-ML 過去ログBak@Flaダウンロードよくある質問と答
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   コーダーズルーム【スクリプト系】
     XML.onLoad()内において親オブジェクトを参照する方法
投稿するにはまず登録を

スレッド表示 | 古いものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
みつもと
Åê¹ÆNo.19163
投稿日時: 2005-7-29 20:07
新米
居住地: 大阪府
投稿: 16
使用環境:
WindowsXP(SP1), Flash MX Professional 2004, SE|PY AS Editor
Re: XML.onLoad()内において親オブジェクトを参照する方法
最後までフォローしていただきありがとうございます。
引用:
もしかすると、メソッドをクラスに定義されていますか?

確かに、showAddressメソッドはクラスに定義しています。
そのあたりの説明が抜けていましたね。申し訳ありませんでした
野中文雄
Åê¹ÆNo.19153
投稿日時: 2005-7-29 17:22
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: XML.onLoad()内において親オブジェクトを参照する方法
もしかすると、メソッドをクラスに定義されていますか? クラス内ではthis.が強引に補われますので、「デフォルト参照」が存在しません(いいかえれば、「デフォルト参照」はthisになります)。
引用:
みつもとさんは書きました:
そういえば確かにそうかも、と思ってデフォルト参照を試してみましたが、動作しませんでした。
res_xml.onLoad = function(success:Boolean) {
    showAddress(address);  //  動作せず
    trace(showAddress);    //  出力:undefined
}


----------------
 

みつもと
Åê¹ÆNo.19149
投稿日時: 2005-7-29 13:32
新米
居住地: 大阪府
投稿: 16
使用環境:
WindowsXP(SP1), Flash MX Professional 2004, SE|PY AS Editor
Re: XML.onLoad()内において親オブジェクトを参照する方法
そういえば確かにそうかも、と思ってデフォルト参照を試してみましたが、動作しませんでした。
res_xml.onLoad = function(success:Boolean) {
    showAddress(address);  //  動作せず
    trace(showAddress);    //  出力:undefined
}

前の返信を読み返してみたら、記述したコードに不足がありました。正しくは
var itsMe:MovieClip;
itsMe = this;
//  (中略)
res_xml.onLoad = function(success:Boolean) {
    itsMe.showAddress(address);
}

でした。申し訳ありません。

今回はDelegateクラスを使用してみようと思います。
本格的なAS2.0のプログラミングは初めてなので、手探りの連続です。
非公式テクニカルノート参考にさせていただきます
野中文雄
Åê¹ÆNo.19147
投稿日時: 2005-7-29 12:35
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: XML.onLoad()内において親オブジェクトを参照する方法
それで動作するのでしたら、「デフォルト参照」を使ってもいけると思います。
res_xml.onLoad = function(success:Boolean) {
    showAddress(address);
}
引用:
みつもとさんは書きました:
自分の参照を使う方法
var itsMe:MovieClip;
//  (中略)
res_xml.onLoad = function(success:Boolean) {
    itsMe.showAddress(address);
}


----------------
 

みつもと
Åê¹ÆNo.19146
投稿日時: 2005-7-29 12:30
新米
居住地: 大阪府
投稿: 16
使用環境:
WindowsXP(SP1), Flash MX Professional 2004, SE|PY AS Editor
Re: XML.onLoad()内において親オブジェクトを参照する方法
crybabycry様、野中様、回答ありがとうございました。
自分の参照を使う方法とDelegateクラスを使用する方法を試しましたが、両方とも期待通りに動作しました。

自分の参照を使う方法
var itsMe:MovieClip;
//  (中略)
res_xml.onLoad = function(success:Boolean) {
    itsMe.showAddress(address);
}


Delegateクラスを使う方法
res_xml.onLoad = Delegate.create(this, function(success:Boolean) {
    this.showAddress(address);
});
野中文雄
Åê¹ÆNo.19132
投稿日時: 2005-7-29 1:24
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: XML.onLoad()内において親オブジェクトを参照する方法
loadVarsで読み込まれた変数の階層」のスレッドが、参考になるでしょうか。
引用:
みつもとさんは書きました:
色々なマニュアルやHOWTO本で紹介されている常套手段を使って処理すると
res_xml.onLoad = function(success:Boolean) {
    //  (レスポンスXMLをパースする処理、住所データを表示する処理)
};

となりますが、ここでつまづいてしまいます。
「住所を表示する」のはzip_mcの仕事なので、
this.showAddress(address);

と記述したいところですが、ここでthisが指すオブジェクトはイベントの発生元であるres_xmlですから、
上のように書いてもまったく動きません。
かといって、_root...からの絶対パスで参照するのも気が引けます。
(オブジェクトとしての独立性が失われてしまいます)

res_xml.onLoadイベントハンドラメソッド内でzip_mcを相対的に参照する方法はないものでしょうか?


----------------
 

ゲスト
Åê¹ÆNo.19130
投稿日時: 2005-7-28 23:42
Re: XML.onLoad()内において親オブジェクトを参照する方法
こんにちは。

変数にMCを入れてはいかがでしょうか?

引用:

みつもとさんは書きました:
zip_mc内のスクリプト
this.zip_str = "5300001";  //  大阪市北区です
var itsMe:MovieClip = this; //自分参照用変数
var send_xml = new XML();  //  リクエスト用
var res_xml = new XML();   //  レスポンス用
//  (XMLノード構築)
send_xml.sendAndLoad(url, res_xml);  //  リクエストを送信

res_xml.onLoad = function(success:Boolean) {
    //  (レスポンスXMLをパースする処理、住所データを表示する処理)
 itsMe.showAddress(address);
};



間違ってたらごめんなさい。
みつもと
Åê¹ÆNo.19129
投稿日時: 2005-7-28 22:48
新米
居住地: 大阪府
投稿: 16
使用環境:
WindowsXP(SP1), Flash MX Professional 2004, SE|PY AS Editor
XML.onLoad()内において親オブジェクトを参照する方法
たびたびお世話になります。みつもとじょうじ改め「みつもと」です。(長いので)
今回はXMLクラスのonLoadイベントハンドラ内において親?オブジェクトを参照する方法についての質問です。

少し例が煩雑かもしれませんがご容赦のほどを。
サーバーに郵便番号を送信して、住所を取得するようなアプリケーションを想定してください。

まず、サーバーとXML通信をするMovieClipがあります。(zip_mc:MovieClip)
zip_mcは自身の中に以下のプロパティを持っています。
・zip_str:String      //  送信する郵便番号
・addr_txt:TextField  //  サーバーから取得した住所を表示するテキストフィールド

また、メソッドは以下ものを持っています。
・getAddress(res_xml:XML):String     //  渡されたXMLをパースして住所データを抽出する
・showAddress(addr_str:String):Void  //  渡された文字列をaddr_txtテキストフィールドに表示する


まずは適当に郵便番号をセットしてリクエストを送信してみます。
zip_mc内のスクリプト
this.zip_str = "5300001";  //  大阪市北区です
var send_xml = new XML();  //  リクエスト用
var res_xml = new XML();   //  レスポンス用
//  (XMLノード構築)
send_xml.sendAndLoad(url, res_xml);  //  リクエストを送信


ここまでは特に問題ありませんが、問題はサーバーからのレスポンス(住所データ)を受信する時です。
色々なマニュアルやHOWTO本で紹介されている常套手段を使って処理すると
res_xml.onLoad = function(success:Boolean) {
    //  (レスポンスXMLをパースする処理、住所データを表示する処理)
};

となりますが、ここでつまづいてしまいます。
「住所を表示する」のはzip_mcの仕事なので、
this.showAddress(address);

と記述したいところですが、ここでthisが指すオブジェクトはイベントの発生元であるres_xmlですから、
上のように書いてもまったく動きません。
かといって、_root...からの絶対パスで参照するのも気が引けます。
(オブジェクトとしての独立性が失われてしまいます)

res_xml.onLoadイベントハンドラメソッド内でzip_mcを相対的に参照する方法はないものでしょうか?
読み返してみると説明が冗長でしたね。お目汚し失礼いたしました。
スレッド表示 | 古いものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 
Copyright (C) 2003 FLASH-japan. All rights reserved.
Powered by Xoops