Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从主干事件侦听器回调函数获取返回值_Javascript_Backbone.js_Backbone Events - Fatal编程技术网

Javascript 从主干事件侦听器回调函数获取返回值

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文件中,

我在一个js文件中有一个函数(
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));
});