2011-08-28 7 views
2

jQuery를이 Mootools의에서 이와 동등한이 당신이MooTools 버전의 jQuery의 네임 스페이스 이벤트?

$div.bind('click.namespace', function) 
$div.unbind('click.namespace') 

등의 작업을 수행 할 수 있습니다? pseudo event을 정의하려고 시도했습니다.

Event.definePseudo('shim', function(split, fn, args) {fn.apply(this, args);}) 

document.body.addEvent('click', function(){alert('regular click');}); 
document.body.addEvent('click:shim', function(){alert('shim click');}); 

document.body.removeEvents('click') // removes both! 
document.body.removeEvents('click:shim') // removes neither! 

막 다른 골목처럼 보입니다.

답변

3

Element.implement를 사용하여 구현했지만 내 질문에 고유 한 MooTools 방식으로 내 기능을 정의하지 않아도됩니다.

Element.implement({ 
    // Call as element.bind('event.namespace', function() {}); 
    bind: function(name, funktion) { 
     // Get event type and namespace 
     var split = name.split('.'), 
      eventName = split[0], 
      namespace = split[1]; 

     // Store the event by its full name including namespace 
     this.bindCache = this.bindCache || {}; 

     if(this.bindCache[name]) { 
      this.bindCache[name].push(funktion); 
     } else { 
      this.bindCache[name] = [funktion]; 
     } 

     // Bind the function to the event 
     this.addEvent(eventName, funktion); 
    }, 

    // Call as element.unbind('event.namespace'); 
    unbind: function(name) { 
     // Unbind the specified event 
     var eventName = name.split('.')[0], 
      funktions = this.bindCache[name], 
      x = 0, 
      funktion; 

     for(; funktion = funktions[x++];) { 
      this.removeEvent(eventName, funktion); 
     } 
    } 
}); 

document.body.bind('click.1', function() {alert('click 1');}); 
document.body.bind('click.1', function() {alert('click 1 other');}); 
document.body.bind('click.2', function() {alert('click 2');}); 

document.body.unbind('click.1'); // leaves click.2