从 Backbone 事件侦听器回调函数中获取 return 值
Get return value from a Backbone event listener callback function
我在一个 js 文件中有一个函数 (getHealth
) LoadSolutionView
到 return 一个百分比。
在另一个 JS 文件中作为页面加载的入口点,我有一个用于此函数的事件侦听器,如下所示
function getHealth(dow) {
Main.Views.LoadSolutionView.getHealth(dow);
}
Main.EventAggregator.listenTo(Main.Views.OverviewView, 'getHealth', getHealth);
在我的 OverviewView
文件中,我有以下函数可以成功触发 getHealth
函数,但我没有得到 returned 值,而是得到了 this
。有没有办法通过触发 getHealth
函数获得 returned 值?
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();
},
Backbone 事件 trigger
函数 returns this
用于链接目的。
事件不像函数调用。请记住,没有代码可以监听它,或者多个监听器可以绑定到该事件,因此 return 值没有意义。
最好使用事件来避免强耦合。如果触发事件的视图需要返回一些数据,您可以使用一些模式。
通过事件传递回调
onHealthCallback: function(health) {
/* use health here */
},
saveRooms: function(dayId, solutionId, shiftId, day) {
/* ... */
this.trigger('getHealth', dayId, this.onHealthCallback.bind(this));
/* ... */
},
使用函数的 bind
方法,this
将在 onHealthCallback
中可用。
然后,侦听器只需调用传递您期望的参数的回调即可。
this.listenTo(OverviewView, 'getHealth', function(dayId, callback) {
callback(LoadSolutionView.getHealth(dayId));
});
通过视图
setHealth: function(health) {
this.health = health;
this.reactToHealhChange();
},
saveRooms: function(dayId, solutionId, shiftId, day) {
/* ... */
this.trigger('getHealth', dayId, this);
/* ... */
},
bind
是不必要的,因为我们要传递整个实例。
监听器现在可以访问完整视图,更灵活但更公开。
this.listenTo(OverviewView, 'getHealth', function(dayId, view) {
view.setHealth(LoadSolutionView.getHealth(dayId));
});
我在一个 js 文件中有一个函数 (getHealth
) LoadSolutionView
到 return 一个百分比。
在另一个 JS 文件中作为页面加载的入口点,我有一个用于此函数的事件侦听器,如下所示
function getHealth(dow) {
Main.Views.LoadSolutionView.getHealth(dow);
}
Main.EventAggregator.listenTo(Main.Views.OverviewView, 'getHealth', getHealth);
在我的 OverviewView
文件中,我有以下函数可以成功触发 getHealth
函数,但我没有得到 returned 值,而是得到了 this
。有没有办法通过触发 getHealth
函数获得 returned 值?
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();
},
Backbone 事件 trigger
函数 returns this
用于链接目的。
事件不像函数调用。请记住,没有代码可以监听它,或者多个监听器可以绑定到该事件,因此 return 值没有意义。
最好使用事件来避免强耦合。如果触发事件的视图需要返回一些数据,您可以使用一些模式。
通过事件传递回调
onHealthCallback: function(health) {
/* use health here */
},
saveRooms: function(dayId, solutionId, shiftId, day) {
/* ... */
this.trigger('getHealth', dayId, this.onHealthCallback.bind(this));
/* ... */
},
使用函数的 bind
方法,this
将在 onHealthCallback
中可用。
然后,侦听器只需调用传递您期望的参数的回调即可。
this.listenTo(OverviewView, 'getHealth', function(dayId, callback) {
callback(LoadSolutionView.getHealth(dayId));
});
通过视图
setHealth: function(health) {
this.health = health;
this.reactToHealhChange();
},
saveRooms: function(dayId, solutionId, shiftId, day) {
/* ... */
this.trigger('getHealth', dayId, this);
/* ... */
},
bind
是不必要的,因为我们要传递整个实例。
监听器现在可以访问完整视图,更灵活但更公开。
this.listenTo(OverviewView, 'getHealth', function(dayId, view) {
view.setHealth(LoadSolutionView.getHealth(dayId));
});