我目前正试图提高自己的重构技巧,我有一段代码,我写了两个非常相似的方法,并且我试图围绕简化我的头部臃肿的代码,任何建议将受到欢迎。试图了解JavaScript中的DRY原理
正如你所看到的,这两种方法非常相似,唯一真正的区别是POST的URL。
authenticateA : function(e) {
var $this = $(e.target).closest('[data-fn]')
, text = $this.text()
, that = this;
$this.text('Authenticating...').addClass("auth-button-disable")
$.ajax({
type : 'POST',
url : '/A_authentications/update/',
data : { _method : 'PUT', sms_token : this.$el.find('#sms-input').val() },
complete: function(xhr) {
if (xhr.status === 200)
that.relocate();
else {
$this.text(text).removeClass("auth-button-disable");
that.handleError(xhr.status);
}
},
dataType : 'json'
});
},
authenticateB : function(e) {
var $this = $(e.target).closest('[data-fn]')
, text = $this.text()
, that = this;
$this.text('Authenticating...').addClass("auth-button-disable")
$.ajax({
type : 'POST',
url : '/B_authentications/',
data : { otp : this.$el.find('#B-input').val() },
complete: function(xhr) {
if (xhr.status === 200)
that.relocate();
else {
$this.text(text).removeClass("auth-button-disable");
that.handleError(xhr.status)
}
},
dataType : 'json'
});
}
我称之为一个事件的方法是单击功能块:
'click [data-fn="authenticate-A"]' : 'authenticateA',
'click [data-fn="authenticate-B"]' : 'authenticateB'
我想这可能是重构为一个方法或两个苗条的方法,我只是不知道从哪里开始,再次感谢提前。
的到重构两种方法成一个关键是确定什么是两个并可能这些差异在任何一个功能参数或从DOM元素中指定之间的差异。作为一个起点,看起来url和类型是不同的,这些值可以来自
与'200'一起使用ajax'complete'方法是多余的。只需使用'done'方法。 'complete'方法也被弃用。 – vsync 2015-03-31 17:09:15
使用'complete'参数[未弃用](http://stackoverflow.com/a/15821199/2788131)。 '.ajax({})。complete()',方法是。 – D4V1D 2015-03-31 17:13:19