我正在尝试为事件实现一个简单的中介模式,但是当我向中介注册时,我的事件回调被调用。
调解员只是:
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')
为什么在简单地绑定到中介对象时调用回调?
答案 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 () {...}
});
如果要执行该功能,请使用括号。如果要引用该对象,请省略括号。