Javascript 从主干事件侦听器回调函数获取返回值
我在一个js文件中有一个函数(Javascript 从主干事件侦听器回调函数获取返回值,javascript,backbone.js,backbone-events,Javascript,Backbone.js,Backbone Events,我在一个js文件中有一个函数(getHealth)来返回百分比 在另一个JS文件中,作为页面加载的入口点,我有一个用于此函数的事件侦听器,如下所示 function getHealth(dow) { Main.Views.LoadSolutionView.getHealth(dow); } Main.EventAggregator.listenTo(Main.Views.OverviewView, 'getHealth', getHealth); 在我的overview文件中,
getHealth
)来返回百分比
在另一个JS文件中,作为页面加载的入口点,我有一个用于此函数的事件侦听器,如下所示
function getHealth(dow) {
Main.Views.LoadSolutionView.getHealth(dow);
}
Main.EventAggregator.listenTo(Main.Views.OverviewView, 'getHealth', getHealth);
在我的overview
文件中,我有以下函数成功触发getHealth
函数,但我没有得到返回值,而是得到了此
的所有子项。是否有方法通过触发getHealth
函数获取返回值
saveRooms: function(dayId, solutionId, shiftId, day) {
var self = this;
var roomIds = self.getIds('roomsEdit');
roomIds = _.map(roomIds, Number);
this.trigger('editShiftDay', this.solution, this.dto, this.numDays, this.endDate, solutionId, dayId, day);
var percentage = this.trigger('getHealth', dayId);
this.hideOptions();
this.checkForChanges();
},
主干事件
trigger
函数返回this
,用于链接
事件与函数调用不同。请记住,没有代码可以侦听它,或者多个侦听器可以绑定到该事件,因此返回值没有意义
最好使用事件来避免强耦合。如果触发事件的视图需要返回一些数据,可以使用一些模式
将回调与事件一起传递
使用函数的bind
方法,此
将在onHealthCallback
中提供
然后,侦听器可以调用回调函数,传递您期望的参数
this.listenTo(OverviewView, 'getHealth', function(dayId, callback) {
callback(LoadSolutionView.getHealth(dayId));
});
通过视图
bind
是不必要的,因为我们正在传递整个实例
监听器现在可以访问完整视图,更灵活但更公开
this.listenTo(OverviewView, 'getHealth', function(dayId, view) {
view.setHealth(LoadSolutionView.getHealth(dayId));
});
如果只使用
此
,为什么要将自身
指定为此
?这不是吗?<代码>$(这是)代码>?如果我使用循环,这是一种习惯,我需要使用self。使用$(此)
不会触发该函数,因此我相信我使用此
是正确的,我不知道我在想什么$(此)
,抱歉。大多数下划线函数提供可选的上下文
参数。我个人从不使用var self=this我的主干应用程序中的代码>技术。
setHealth: function(health) {
this.health = health;
this.reactToHealhChange();
},
saveRooms: function(dayId, solutionId, shiftId, day) {
/* ... */
this.trigger('getHealth', dayId, this);
/* ... */
},
this.listenTo(OverviewView, 'getHealth', function(dayId, view) {
view.setHealth(LoadSolutionView.getHealth(dayId));
});