如何最好地在JavaScript中跨多个方法重构这组重复的触发器调用?
以下是我的代码:如何最好地在JavaScript中跨多个方法重构这组重复的触发器调用?,javascript,refactoring,Javascript,Refactoring,以下是我的代码: 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
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')
结尾。这用于更新web应用程序上的进度条-在接收到来自每个元素的done
事件后,无论是成功还是错误,或者当它已经处于新状态时,它都会倒计时。由于计数器是确定性的,它按项目数递增,按接收的done
s数递减
问题:是否有更好的方法删除每个函数末尾对
dispatcher.trigger('done')
的重复调用?或者这是一种必然的罪恶。我们在各种对象中都有这样的代码,只是为了同步“下一步”的执行(可以将其视为“同步屏障”)。您可以创建一个自动追加调用的方法
criterion.addProgressMethod = function( methodName, method ) {
criterion[methodName] = function() {
method();
dispatcher.trigger('done');
}
};
// usage
criterion.addProgressMethod( 'saveSuccess', function() {
// do something here
} );
我不确定这是否比您现有的更好,但这是一个想法。您可以创建一个自动追加调用的方法
criterion.addProgressMethod = function( methodName, method ) {
criterion[methodName] = function() {
method();
dispatcher.trigger('done');
}
};
// usage
criterion.addProgressMethod( 'saveSuccess', function() {
// do something here
} );
我不确定这是否比你所拥有的更好,但这是一个想法。基本上就是这样。我希望以某种方式包装类似于AOP的调用,以摆脱记忆中的触发器。我猜在参数的情况下应该是
method.call(这个,参数)
correct?大致上是这样的。我希望以某种方式包装类似于AOP的调用,以摆脱记忆中的触发器。我猜在参数的情况下应该是方法。调用(这个,参数)
正确吗?