Как удалить EventListener?

В документации указано, что removeListener -- /famous/core/Surface.js

removeListener (type, fn) 
Unbind an event by type and handler. This undoes the work of 'on'

Итак, что я хочу сделать, это... Есть четыре поверхности, когда я нажимаю на одну, она удаляет действие щелчка с трех других, поэтому пользователь не сможет щелкнуть их.

removeEventListener('click', function() {
   console.log("removed"); 
});

Что я делаю не так? Спасибо.


person mervasdayi    schedule 29.05.2014    source источник


Ответы (1)


Чтобы получить поверхность, на которую нажали в событии Famo.us, вы можете использовать e.origin. Затем вы можете использовать эту поверхность для сравнения со всеми поверхностями и соответствующим образом отвязать события. Чтобы правильно использовать removeListener, вам нужно передать ему тип события, а также функцию, которую вы хотите удалить.

Вот полный пример или то, что вы описали. Если вы нажмете на один из квадратов, он станет единственным квадратом, на который можно кликнуть дальше.

Надеюсь это поможет!

var Engine          = require("famous/core/Engine");
var Surface         = require("famous/core/Surface");
var Transform       = require("famous/core/Transform");
var StateModifer    = require("famous/modifiers/StateModifier");

var context = Engine.createContext();

var surfaces = [];

var handleClick = function(e){

    var count = parseInt(e.origin.getContent()) + 1 ;
    e.origin.setContent(count);

    for (var i = 0; i < surfaces.length; i++) {
        var surface = surfaces[i];
        if (surface != e.origin) {
            surface.removeListener('click',handleClick);
        };
    };

}

var colors = ["red","green","blue","purple"];

for (var i = 0; i < 4; i++) {
    var surface = new Surface({
        size:[100,100],
        content: "0",
        properties: {
            backgroundColor: colors[i],
            color: 'white',
            lineHeight:'100px',
            textAlign:'center'
        }
    })

    surface.state = new StateModifer({
        transform:Transform.translate(0,i*100,0)
    })


    surface.on("click",handleClick);

    surfaces.push(surface);

    context.add(surface.state).add(surface);

};
person johntraver    schedule 29.05.2014