作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是我的代码:
var criterion = _.extends({},Base);
criterion.dispatcher.on('save',this.saveIt,this); //respond to event save.
criterion.saveIt = function(){
if(this.hasChanged())
this.save({success:this.saveSuccess, error:this.saveError}); //method in Base
else
dispatcher.trigger('done');
};
criterion.saveSuccess = function() {
//do something
dispatcher.trigger('done');
};
criterion.saveError = function() {
//do something
dispatcher.trigger('done');
};
对于 ajax 特定项目,有不少以 dispatcher.trigger('done')
结尾的函数。这用于更新网络应用程序上的进度条 - 它在成功或错误或已处于新状态时从每个元素接收到 done
事件后进行倒计时。由于计数器是确定性的,因此它会根据项目数进行递增计数,并根据收到的done
数量进行递减计数。
问题:是否有更好的方法来删除每个函数末尾对 dispatcher.trigger('done')
的重复调用?或者说这是一种必要的罪恶。我们在各种对象中都有这样的代码,只是为了同步“下一步”的执行(可以将其视为“同步障碍”)。
最佳答案
您可以创建一个自动附加调用的方法。
criterion.addProgressMethod = function( methodName, method ) {
criterion[methodName] = function() {
method();
dispatcher.trigger('done');
}
};
// usage
criterion.addProgressMethod( 'saveSuccess', function() {
// do something here
} );
我不确定这是否比您现有的更好,但这是一个想法。
关于javascript - 如何最好地在 JavaScript 中重构这组跨多个方法的重复触发调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11890477/
我是一名优秀的程序员,十分优秀!