JavaScript   发布时间:2022-04-16  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了JavaScript – 是骨干的触发器()同步还是异步?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在构建一个通用的BACkbone视图来管理多个子视图.我有时需要执行逻辑来准备这些视图,然后再呈现.我正在虑使用BACkbone事件来启用预先挂钩,如下所示:
view = new (this.child_view);
this.trigger('pre_render',view);
view.render();

将由trigger()调用的事件是否同步执行,从而保证在render()行被调用之前它们都会完成?

解决方法

基本上是的,它是同步的.

以下是源的相关部分:

trigger: function(Name) {
  if (!this._events) return this;
  var args = slice.call(arguments,1);
  if (!eventsApi(this,'trigger',name,args)) return this;
  var events = this._events[name];
  var allEvents = this._events.all;
  if (events) triggerEvents(this,events,args);
  if (allEvents) triggerEvents(this,allEvents,arguments);
  return this;
},

导入功能是triggerEvents,它实际上调用处理程序.根据comments,这只是一个优化的调度员.请注意,它们都调用.call()和.apply(),所以回调将在控制权交给调用者之前完成.

var triggerEvents = function(obj,args) {
    var ev,i = -1,l = events.length;
    switch (args.length) {
    case 0: while (++i < l) (ev = events[i]).callBACk.call(ev.ctX);
    return;
    case 1: while (++i < l) (ev = events[i]).callBACk.call(ev.ctx,args[0]);
    return;
    case 2: while (++i < l) (ev = events[i]).callBACk.call(ev.ctx,args[0],args[1]);
    return;
    case 3: while (++i < l) (ev = events[i]).callBACk.call(ev.ctx,args[1],args[2]);
    return;
    default: while (++i < l) (ev = events[i]).callBACk.apply(ev.ctx,args);
    }
};

正如其他人所说,触发器处理程序如果有这样的倾向,可以自由安排自己的回调.因此,处理程序在返回之前是否已经完成其工作取决于处理程序代码本身.

大佬总结

以上是大佬教程为你收集整理的JavaScript – 是骨干的触发器()同步还是异步?全部内容,希望文章能够帮你解决JavaScript – 是骨干的触发器()同步还是异步?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。