Mootools - привязка к экземпляру класса и доступ к объекту события - PullRequest
1 голос
/ 12 августа 2010

У меня есть компонент, который запускает событие onFocus.Я назначаю метод класса для обработки события onFocus.В обработчике событий мне нужен доступ как к экземпляру класса, так и к самому объекту события.

Однако, когда я использую .bind (this), я больше не могу получить объект события, потому что область действия теперь изменяется на экземпляр класса.И если я не использую .bind (это), я могу получить доступ к объекту события, но не к экземпляру класса.

Я уверен, что есть решение, но я не смог понять это,Есть идеи?

Спасибо.

new Class( {
    handleComponentFocus : function() {
        // this refers to the class instance
        // I would also like to get the event information as well, but can't now that the scope has been changed    
    }.bind(this)

    this.pickList = new BasePickList( { 
        onFocus : this.handleComponentFocus
    });
})

1 Ответ

2 голосов
/ 12 августа 2010

вы можете опубликовать больше? в основном - скелет для класса, а также функция, в которой вы вызываете новый экземпляр BasePickList. Источник BasePickList не помешает увидеть, как событие запускается.

Теперь вам не нужно заключать метод класса в .bind(this), он делает это автоматически. Что касается событий, зависит от того, что их вызывает, если это поле ввода, то оно должно передавать исходное событие, которое вы можете захватить через handleComponentFocus: function(e) {, где e будет объектом события.

это может быть отстранением от того, что вы пытаетесь сделать, но это может дать вам некоторые идеи http://www.jsfiddle.net/dimitar/KdhvG/

проверяет вывод консоли, когда вы сосредотачиваетесь на поле - он передает управление методу handleComponentFocus с объектом события (в комплекте с event.target, который указывает на флажок), а также с областью действия экземпляра класса.

<input type="checkbox" id="foo" />

и

var banana = new Class({
    Implements: [Events, Options],
    initialize: function(options) {
        this.setOptions(options);
        this.element = document.id(this.options.element);
        this.element.addEvents({
            focus: function(e) {
                this.fireEvent("focus", e);
            }.bind(this)
        });
    }
});

var foo = new Class({
    handleComponentFocus: function(e) {
        console.log(e);
    },
    initialize: function() {
        this.picklist = new banana({
            element: "foo",
            onFocus: this.handleComponentFocus
        });
    }
});

new foo();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...