Events 在js mootools的事件处理程序中访问类属性

Events 在js mootools的事件处理程序中访问类属性,events,properties,static,mootools,handler,Events,Properties,Static,Mootools,Handler,我有一个JS对象(使用mootools),它存储了一些DOM元素,并将它们附加到事件侦听器: window.myObject = { init: function(el1ID, el2ID){ this.myElement1 = document.getElement(el1ID); this.myElement2 = document.getElement(el2ID); this.myElement1.addEvents({

我有一个JS对象(使用mootools),它存储了一些DOM元素,并将它们附加到事件侦听器:

window.myObject = {
    init: function(el1ID, el2ID){
        this.myElement1 = document.getElement(el1ID); 
        this.myElement2 = document.getElement(el2ID);

        this.myElement1.addEvents({
            'click' : function(){
                 myObject.myElement2.innerHTML("foo");
             }
        });
    }

}
现在,只有当页面中只有一个对象
myObject
时,这才有效。我必须为另一个结构创建另一个对象
el1ID
-
el2ID
,我希望将此对象作为一个类,并为每个结构实例化一个对象,以便使每个事件处理独立于其他结构。我的问题是:如何在事件处理程序中访问
myObject
对象的属性

'click' : function(){
    myElement2.innerHTML("foo")
 }
不起作用,而且

'click' : function(){
    this.myElement2.innerHTML("foo")
 }

将搜索
myElement2
,作为
myElement1
(又称事件引发者)的属性。除了静态访问对象的属性,我可以做什么?

单击事件回调以元素为中心,并将以元素作为执行上下文触发,即this===myObject.myElement1:

    this.myElement1.addEvents({
        'click' : function(){
             myObject.myElement2.innerHTML("foo");
         }
    });
MooTools中没有
Element.prototype.innerHTML()
方法,顺便说一句,它是
Element.prototype.set
,用作
el.set('html',someString)。在1.1x中曾经是
.setHTML()

为了能够访问对象,您有几种模式

    this.myElement1.addEvents({
        'click' : function(e){
             this.set('html', 'foo');
         }
    });
要访问父对象,可以改为在变量中重新绑定或保存引用:

    this.myElement1.addEvents({
        'click' : function(e){
             // this === myObject
             this.myElement2.set('html', 'foo');
             // getting to original
             e.target === this.myElement1; // from event object, like currentTarget
         }.bind(this) // <-- binding to outer object instead
    });
就这样

init: function(){
    var self = this;
    ...
    this.myElement1.addEvents({
        'click' : function(e){
             // self is orig. this === self.myElement1;
             self.myElement2.set('html', 'foo');
         }
    });
}