2012-12-23 4 views
1

이벤트에 간단한 중개자 패턴을 구현하려고하지만 중재자에 이벤트 콜백을 등록 할 때 내 이벤트 콜백이 호출되고 있습니다.바인딩 될 때 백본 이벤트 콜백이 호출됩니다.

중재자는 간단하다 :

define(function(require){ 
    'use strict'; 
    var _ = require('underscore'); 
    var Backbone = require('backbone'); 

    return _.extend(Backbone.Events); 
}); 

나는보기가로드되면

define(function (require) { 

'use strict'; 

var Backbone = require('backbone'); 
var mediator = require('mediator'); 

var Sandbox = Backbone.View.extend({ 

    el: '.sandbox', 
    initialize: function() { 
     this.render(); 
     this.bindEvents(); 
    }, 

    bindEvents:function(){ 
     mediator.on("sandbox:change", this.changeText(), this); 
    }, 

    render: function() { 
     $(this.el).html("SANDBOX VIEW IS WORKING"); 
    }, 

    changeText: function() { 
     $(this.el).html("THE TEXT HAS CHANGED"); 
    } 
}); 

return Sandbox; 

}); 

에서, sandbox:change 이벤트가 떨어져 해고없는 백업 모델 또는 템플릿 간단한보기 및 changeText을 만들었습니다 함수는 아무 것도 호출되지 않았는데도 호출됩니다. mediator.trigger('sandbox:change')

왜 단순히 콜백 함수가 호출 될 때 호출됩니다 중재자 객체?

+6

코드는 this.changeText()를 호출하고 백본에게 그 호출 결과를 바인드하도록 지시하기 때문에 *. 당신이 원하는 것은'mediator.on ("sandbox : change", this.changeText, this)'입니다 ('()가 없다는 것에주의하십시오). – DCoder

+0

아! 나는 장님이 말한 것을 본다 ... 고마워! – Mars

답변

0

브라우저가 샌드 박스 변경 이벤트 바인딩 mediator.on("sandbox:change", this.changeText(), this);을 평가할 때 ()이 포함되어 있기 때문에 changeText 함수가 실행 중입니다.

mediator.on("sandbox:change", this.changeText, this); 

이 changeText이보기의 구성원 인 개체임을 기억하십시오 : 당신이 정말로 원하는 것은 바인딩 이벤트에 changeText 함수 개체를 전달합니다.

var Sandbox = Backbone.View.extend({ 
    ... 
     changeText: function() {...} 
    }); 

괄호를 사용하려면이 기능을 실행하십시오. 개체를 참조하려면 괄호를 생략하십시오.

관련 문제