Mootools クラスでクリック ハンドラーを定義しようとしています。私のハンドラーは、リンクのブロックを開くことを想定しています。各リンクには、リンク固有のアクションをトリガーする独自のクリックハンドラーを「装備」する必要があります。つまり、次の HTML コードがあるとします。
<div id="wrapper">
<a href="#" id="header">open options</a>
<div class="optionsBlock" style="display:none">
<a href="#">1</a>
<a href="#">2</a>
<a href="#">3</a>
</div>
</div>
次に、Mootools で次のようなクラスを定義しようとしています。
var myHandler = new Class({
Implements : [Events],
initialize : function(element){
this.element = document.id(element);
this.elements = this.element.getChildren('a');
this.elements.addEvents('click', function(ev){
ev.preventDefault();
//'this' as a reference to the current element in the array, which is being clicked, correct?
this.getSibling('div.optionsBlock').setStyle('display', 'block');
var parentLink = this;
this.getSibling('div.optionsBlock').getChildren('a').addEvent('click', function(e){
e.preventDefault();
//should append the text of currently clicked link into the parent link
parentLink.appendText(this.get('text'))
});
});
}
});
new myHandler('wrapper');
これは、コードがどのようにあるべきかを想像できる例にすぎません (そして、このコードはまったく良くないと確信しています) が、次の点については本当に助けが必要です:
新しいイベントを追加すると常に「this」のスコープが変更されるため、クラス インスタンスとクリックされている要素の両方への参照を保持するにはどうすればよいですか?
初期化メソッド内にコード全体が含まれないようにするには、クラスをどのように変更すればよいですか? イベントハンドラーごとに個別のメソッドを作成しようとしましたが、結果として、「this」の範囲とバインドして混乱し、これらすべてをまとめようとすると本当にイライラしますが、この知識を把握したいと思います.
クラス内にネストされたイベントハンドラーを追加するときに、「this」のスコープを追跡する方法は? 私は正直にググって答えを探しましたが、役に立ちませんでした。
ありがとう!