我正在尝试在 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”的范围?老实说,我用谷歌搜索并寻找答案,但无济于事。
谢谢!