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

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   コーダーズルーム【スクリプト系】
     ビルトインメソッドのカスタム化について
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
+39
Åê¹ÆNo.8624
投稿日時: 2004-6-27 11:16
新米
居住地:
投稿: 14
使用環境:
XP + MX2004
ビルトインメソッドのカスタム化について
+39/トザキです。
検証していることがあるのですが、いまいち見えない部分が多いのでお知恵をお貸し頂ければと思います。

現在ちょっと特殊なアプリ系のFlashコンテンツを制作しているのですが、その中でXMLのloadの際に引数で渡された外部データのurlを加工してloadを実行したいと思っています。

---
a = new XML();
a.load("hogehoge.xml");
---
としたときに
----
a.load(filePath+"hogehoge.xml");
----
という感じにしたいのです。
単純にloadの引数にfilePathを追加して記述すればよいのですが、オーサリング環境と実行される環境にズレがあるので、オーサリング環境での"filePath"の追加はデバッグなどの問題から避けたいと思っています。
そこでビルトインメソッドの"load"をカスタムできないか?と。
単純に書くと
----
XML.prototype.load = function(arg){
this.load(filePath+arg);
}
----
ということなのですが、これだと無限ループに入ってしまいます。
----
XML.prototype.load2 = function(arg){
this.load(arg);
}
XML.prototype.load = function(arg){
this.load2(filePath+arg);
}
----
とか
----
XML2 = function () {
};
XML2.prototype = new XML();
XML.prototype.load = function(arg) {
this = new XML2();
this.load(filePath+arg);
};
----
とかやってみたのですが、うまく動きません(当然と言えば当然)
ちなみにオーサリング環境ではこれらのカスタムクラスは適応されず、ノーマルの状態で動作。アプリケーションとして動作する場合のみ上記のメソッドに変更するという感じになります。

なので通常であれば
---
XML.prototype.xload = function(arg) {
this.load(filePath+arg);
};
a = new XML();
a.xload("hogehoge.xml");
----
としてオーサリング時にカスタムメソッドを記述して解決できるところができないという妙な状況であります。そもそもビルトインメソッドのカスタム化というものが許されるものなのか?というところもいまいち自信がないのですが・・・。
なんか分かりにくい状況で申し訳ありません。



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

youich
Åê¹ÆNo.8625
投稿日時: 2004-6-27 12:00
職人
居住地: kobe
投稿: 349
使用環境:
Tiger
Re: ビルトインメソッドのカスタム化について
こんにちはトザキさん。

引用:


としてオーサリング時にカスタムメソッドを記述して解決できるところができないという妙な状況であります。そもそもビルトインメソッドのカスタム化というものが許されるものなのか?というところもいまいち自信がないのですが・・・。
なんか分かりにくい状況で申し訳ありません。


オーサリング時(デバッグ時)にカスタムメソッドを使うようにする方が
安全じゃないかと思います。

XML.prototype.__load = XML.prototype.load;
XML.prototype.load = function(url){
	this.__load(FILE_PATH + url);
}


それか、ファイルパスを作るファンクションを作るとかでは対応は無理ですか?

funciton filepath(path){
  return FILE_PATH + path;
}

function filepath(path){
   return path;
}
xml.load(filepath(url));


----------------
- yo

野中文雄
Åê¹ÆNo.8626
投稿日時: 2004-6-27 12:47
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: ビルトインメソッドのカスタム化について
カスタムメソッドを使えない理由が、正確に理解できません。ということで、カスタムメソッドを使ってはいけませんか?
// _root
// 第1フレームアクション
XML.filePath = "filePath/";  // オーサリング時コメントアウト
// カスタムメソッド定義
XML.prototype.xload = function(arg_str) {
    var myFilePath = XML.filePath;
    if (typeof myFilePath == "string") {
        this.load(myFilePath+arg_str);
    } else {
        this.load(arg_str);
    }
};

// XMLロード時
var my_xml = new XML();
my_xml.xload("hogehoge.xml");

引用:
+39さんは書きました:
a = new XML();
a.load("hogehoge.xml");
---
としたときに
----
a.load(filePath+"hogehoge.xml");
----
という感じにしたいのです。
単純にloadの引数にfilePathを追加して記述すればよいのですが、オーサリング環境と実行される環境にズレがあるので、オーサリング環境での"filePath"の追加はデバッグなどの問題から避けたいと思っています。
...
なので通常であれば
---
XML.prototype.xload = function(arg) {
this.load(filePath+arg);
};
a = new XML();
a.xload("hogehoge.xml");
----
としてオーサリング時にカスタムメソッドを記述して解決できるところができないという妙な状況であります。そもそもビルトインメソッドのカスタム化というものが許されるものなのか?というところもいまいち自信がないのですが・・・。/quote]


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

+39
Åê¹ÆNo.8627
投稿日時: 2004-6-27 12:59
新米
居住地:
投稿: 14
使用環境:
XP + MX2004
Re: ビルトインメソッドのカスタム化について
トザキです。

すいません、カスタムメソッドが使えない理由が分かりにくかったですね。あまり詳しいことは業務上の問題で言えなくて申し訳ないのですが、かなり特殊な使い方をされるFlashで、実際稼動する環境ではプログラムを経由してSWFを制御します。そしてそれらのSWFへのクラス定義をSWFではなく、プログラムからSWFに埋め込むような感じでSWFに引き渡す感じになります。

このため実動環境に適したMethodはオーサリング環境には適応されず、オーサリング環境ではまったく何も動かないという状況になってしまうという代物であります。
上記の理由からカスタムメソッドを使用せずにビルトインメソッドベースで切替を行いたいと思っているわけです。

引用:

それか、ファイルパスを作るファンクションを作るとかでは対応は無理ですか?

ということでこれを適応してしまうとオーサリング時にはまったく動作しなくなってしまうという状況です。


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

+39
Åê¹ÆNo.8628
投稿日時: 2004-6-27 13:05
新米
居住地:
投稿: 14
使用環境:
XP + MX2004
Re: ビルトインメソッドのカスタム化について
説明が分かりにくかったみたいですいません。
なんというかScreenWeaverみたいな感じなんだけど、EXEレベルではなくClassも動的に進化してくようなSWFベースのプログラムになるので、オーサリング環境時に実動環境と同じ状況を作り出すのが難しいのです。
このためオーサリング環境時でも動作してデバッグなど可能だけど、実際の稼働環境に入れてもそのまま動作するようにできればと模索しています。あと私一人が作るのであればそのへん全然問題ないのですが、不特定多数に制作を分散させる可能性があるので、その辺できるだけ一般的なメソッドを使用させたいのです・・・。

なんか説明下手で申し訳ありません。
やはりビルトインメソッドのカスタマイズってのは難しそうですね・・。


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

youich
Åê¹ÆNo.8631
投稿日時: 2004-6-27 13:44
職人
居住地: kobe
投稿: 349
使用環境:
Tiger
Re: ビルトインメソッドのカスタム化について
引用:


なんか説明下手で申し訳ありません。
やはりビルトインメソッドのカスタマイズってのは難しそうですね・・。


??↓じゃだめなのですか?
引用:
オーサリング時(デバッグ時)にカスタムメソッドを使うようにする方が
安全じゃないかと思います。


XML.prototype.__load = XML.prototype.load;
XML.prototype.load = function(url){
this.__load(FILE_PATH + url);
}


----------------
- yo

+39
Åê¹ÆNo.8632
投稿日時: 2004-6-27 13:59
新米
居住地:
投稿: 14
使用環境:
XP + MX2004
Re: ビルトインメソッドのカスタム化について
あ、すいません。できました。
なるほどこういう風に書けばいいのですね。
引用:

XML.prototype.load2 = function(arg){
this.load(arg);
}
XML.prototype.load = function(arg){
this.load2(filePath+arg);
}

と一緒のことなのかなと勘違いしておりました。
これだとXML.load()を参照してしまってループに入ってしまうわけですね・・・。非常に勉強になりました。ありがとうございました。


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

+39
Åê¹ÆNo.11368
投稿日時: 2004-10-8 12:45
新米
居住地:
投稿: 14
使用環境:
XP + MX2004
Re: ビルトインメソッドのカスタム化について
時間が空きましたが再び分からない点が出てきました。
これまではAS1でのビルトインメソッドのカスタム化でしたが、これをAS2でやるとどうなるのでしょう?
class AAA extends XML{
var __load :Function=load;
function aaa(arg){
    this.parseXML(arg);
    this.ignoreWhite = true;
}
function load(url){
    this.__load(FILE_PATH + url);
}
}
にすると無限ループに入ってしまいます。
今のところCLASS定義をタイムラインからprototypeで更に変換して対応していますが、CLASS定義の中で定義できないかな?と色々検証中です。


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

youich
Åê¹ÆNo.11402
投稿日時: 2004-10-8 20:58
職人
居住地: kobe
投稿: 349
使用環境:
Tiger
Re: ビルトインメソッドのカスタム化について
どうもおひさしぶりです。(^^;
引用:

+39さんは書きました:
時間が空きましたが再び分からない点が出てきました。
これまではAS1でのビルトインメソッドのカスタム化でしたが、これをAS2でやるとどうなるのでしょう?
class AAA extends XML{
var __load :Function=load;
function aaa(arg){
    this.parseXML(arg);
    this.ignoreWhite = true;
}
function load(url){
    this.__load(FILE_PATH + url);
}
}
にすると無限ループに入ってしまいます。
今のところCLASS定義をタイムラインからprototypeで更に変換して対応していますが、CLASS定義の中で定義できないかな?と色々検証中です。

XMLを継承するクラスでいいのなら、素直にsuperを呼んでやれば
いいのではないでしょうか?

class AAA extends XML{
    public function load(url:String){
        super.laod(FILE_PATH + url);
    }
}



----------------
- yo

+39
Åê¹ÆNo.11412
投稿日時: 2004-10-9 4:03
新米
居住地:
投稿: 14
使用環境:
XP + MX2004
Re: ビルトインメソッドのカスタム化について
いつもありがとうございます。
解決しました。
で、その先の処理として"onLoad"自体をカスタムできないか?と考えています。元々xmlは"onData"があるので現在はそれを経由して処理していますが、"onLoad"自体をカスタムすることは可能なのでしょうか?

現在実装可能な形のイメージは
タイムライン上:
hogehoge = new AAA();
hogehoge.onLoad2 = function(result){
    //読み込み完了後にユーザが実行するアクション
    //この関数名をonLoadで定義できないか?
    trace(this);
}
hogehoge.load(***);

クラス内:
class AAA extends XML{
    var title:String;
    public function load(url:String){
        super.load(FILE_PATH + url);
    }
    public function onLoad(result){
        trace("無条件に行いたい処理");
        this.title = this.firstChild.firstChild.nodeValue;
        //ユーザー定義の処理を実行
        onLoad2(result);
    }
}

これをタイムライン上で"onLoad2"を使わずに"onLoad"で定義できるようにできないか?と(あまりオーサリング環境上にカスタムメソッドを見せたくないという理由ですが)
この辺イベント系は独自に定義できないものでしょうか?
onDataを使って一応onLoadの前に処理はしているのですが、イベント自体の置き換えとかができるとボタン系の"onRelease"等の定義の際に便利かなと思っています。


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

(1) 2 3 »
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

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