以下是我的代码:
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
数量向下计数。
问题:还有更好的方法可以在每个功能结束时删除对dispatcher.trigger('done')
的重复调用吗?或者这是一个必要的邪恶。我们在各种对象中都有这样的代码,只是为了同步“下一步”的执行,可以这么说(把它想象成'同步障碍')。
答案 0 :(得分:1)
您可以创建一个自动附加呼叫的方法。
criterion.addProgressMethod = function( methodName, method ) {
criterion[methodName] = function() {
method();
dispatcher.trigger('done');
}
};
// usage
criterion.addProgressMethod( 'saveSuccess', function() {
// do something here
} );
我不确定这是否比你所拥有的更好,但这是一个想法。