« クラス/オブジェクト | トップページ | HTML要素の取得 »

2007年3月16日 (金)

関数の呼び出しイベント

dojo.event.connect("after", exampleObj, "foo", exampleObj, "bar");

のように記述することで、exampleObj.foo()が呼ばれると、続けてexampleObj.bar()を呼び出すようになる。"after"ではなく "before"と書くと、exampleObj.foo()を呼びだすと、foo()が実行される前にexampleObj.bar()が実行されてから、foo()が実行される

Dojoの関数に対して処理を追加したいときなど、既存のコードに処理を追加するときなどに使える。

var o = new Object();
o.init = function (){alert('a');};
o.next = function (){alert('b');};

dojo.event.connect("before", o, "init", o, "next");

この例では、initを呼びだすと、initが実行される前にnextが実行されてから、initが実行される。

最初の引数 "before" または  "after"が省略されると、"after"として処理される。

以下のようにobjectの指定なしで、記述することもできる。この場合は、func1を呼び出すと、その後にfunc2が呼ばれる。

dojo.event.connect("func1", "func2");

引数

引数を指定して関数を呼び出したときは、両方の関数に同じ引数が渡される。

after, beforeではなく、aroundを指定することで、関数が呼ばれる前に引数をいじることができる。以下の例では、helloPressed('a','b')と呼び出されいるが、argSwapAroundAdviceで、1つ目と2つ目の引数の順番を入れ替えて、3つ目の引数として'c'を追加している。

function helloPressed(message, message2, message3){
  dojo.debug('Hello World! '+message+', '+message2+', '+message3);
}

function argSwapAroundAdvice(miObj){
  var tmp = miObj.args[1];
  miObj.args[1] = miObj.args[0];
  miObj.args[0] = tmp;
  miObj.args[2] = 'c';
  ret = miObj.proceed();
  return ret;
}

function init(){
  helloPressed('a', 'b');
}
dojo.event.connect('around', 'helloPressed', 'argSwapAroundAdvice');
dojo.addOnLoad(init);

aroundにより、helloPressedが呼び出される前に、argSwapAroundAdviceが呼ばれる。argSwapAroundAdviceは、引数として、helloPressedを呼び出したときの引数をargs配列として受け取る。このargsを変更して、最後にproceed()を呼び出して、returnする。

« クラス/オブジェクト | トップページ | HTML要素の取得 »

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/232684/5703411

この記事へのトラックバック一覧です: 関数の呼び出しイベント:

« クラス/オブジェクト | トップページ | HTML要素の取得 »