Mootools类和绑定

时间:2011-07-15 16:09:42

标签: class variables binding scope mootools

我无法访问Class和当前元素。如何才能访问当前元素和类?

// Class stuff above
fuction1 : function () {
  myelements.addEvent('click', this.function2);
},
function2 : function () {
  // "this" is the element from function1
  this.getParent('div')

  // now I need to call another function
  // But since the scope is the element, I get an error
  // If I bind function two,
  // how can I gain access to the element?
  this.function3();
}
//Class stuff below

谢谢!

3 个答案:

答案 0 :(得分:1)

这是一种更清洁的方式。请注意,事件已传递给方法:

var Foo = new Class({

    initialize: function() {
        this.elements = $$('li').addEvent('click', this.click.bind(this));
    },

    click: function(e) {
        console.log(this); // Foo Class
        console.log(e.target); // the clicked this.elements item
    }

});

一个有效的例子:http://jsfiddle.net/AtUgd/

答案 1 :(得分:0)

我通常做这样的事情:

FooBar = new Class({
    initialize: function() {
        this.element = $('foobar');
        this.element.addEvent('click', function(e) { this.foo(e) }.bind(this));
    },
    foo: function(e) {
        console.log( $(e.target) );
    }
});

答案 2 :(得分:0)

请注意,e.target并不总是您真正期望的元素(您绑定的元素)。

这是一个被点击的元素,所以如果你的binded元素包含一些内容,click事件将获得bubbled up并且它会触发,但你会在e.target中有错误的元素


如果你想将事件绑定元素传递给你的一个类方法,你可以这样做:

var self = this; // 'this' is class reference
elements.addEvent('click', function(e){
    self.myClassMethod(this, e); // now 'this' is clicked element
});

现在你已经将正确的元素传递给你的方法并准备好操作了。