绑定时调用骨干事件回调,而不是触发

时间:2012-12-23 05:35:17

标签: javascript backbone.js

我正在尝试为事件实现一个简单的中介模式,但是当我向中介注册时,我的事件回调被调用。

调解员只是:

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事件被触发,即使没有调用mediator.trigger('sandbox:change')

,也会调用changeText函数

为什么在简单地绑定到中介对象时调用回调?

1 个答案:

答案 0 :(得分:0)

当浏览器评估您的沙箱更改事件绑定mediator.on("sandbox:change", this.changeText(), this );时,正在执行changeText函数,因为包含()。你真正想要做的是将changeText函数对象传递给事件绑定:

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

请记住,changeText是一个对象,它是您视图的成员。

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

如果要执行该功能,请使用括号。如果要引用该对象,请省略括号。