重构相同代码的两个变体

时间:2018-03-08 12:09:12

标签: javascript jquery algorithm refactoring

我不是开发者,更像是设计师。我在两个不同的页面上有一个日历,这两个页面的行为应该不同。所以我修改了一些代码以便它发生,并且它在我测试它时做了。 但是现在我必须将这两个变体集成在一起,当然gulp因为“已定义”错误而无法编译。所以我试图将它们与一些逻辑合并,但我是一个菜鸟,所以我需要你的帮助。 这是两位,我试图做的,但我确定这是错的

// Field used on the calendar view.
var dateFromFilter = $("#dateFromFilter").not($(".unlimitedDateFilter"))
.fdatepicker($.extend({}, datepickerCommonOptions, {
    onRender: function(date) {
        return date.valueOf() < now.valueOf() ? "disabled" : "";
    }
}))
.on("changeDate", function(ev) {
    if (ev.date.valueOf() > dateToFilter.date.valueOf()) {
        var newDate = new Date(ev.date);
        newDate.setDate(newDate.getDate() + 1);
        dateToFilter.update(newDate);
    }
    dateFromFilter.hide();
    $("#dateToFilter")[0].focus();
})
.data("datepicker");


// Field used on the sales results view
var dateFromFilter = $("#dateFromFilter.unlimitedDateFilter")
.fdatepicker($.extend({}, datepickerCommonOptions))
.on("changeDate", function(ev) {
    if (ev.date.valueOf() > dateToFilter.date.valueOf()) {
        var newDate = new Date(ev.date);
        newDate.setDate(newDate.getDate() + 1);
        dateToFilter.update(newDate);
    }
    dateFromFilter.hide();
    $("#dateToFilter")[0].focus();
})
.data("datepicker");

我的尝试:

var dateFromFilter = $("#dateFromFilter")

if ($("dateFromFilter").hasClass(unlimitedDateFilter))  {
    $.fdatepicker($.extend({}, datepickerCommonOptions))
}
else    {  
    $.fdatepicker($.extend({}, datepickerCommonOptions, {
        onRender: function(date) {
            return date.valueOf() < now.valueOf() ? "disabled" : "";
        }
    }))
}

$.on("changeDate", function(ev) {
    if (ev.date.valueOf() > dateToFilter.date.valueOf()) {
        var newDate = new Date(ev.date);
        newDate.setDate(newDate.getDate() + 1);
        dateToFilter.update(newDate);
    }
    dateFromFilter.hide();
    $("#dateToFilter")[0].focus();
})
.data("datepicker");

感谢您的帮助

编辑:

感谢您的建议,我试图将条件放在onRender中,但它不起作用。我想我需要在条件中封装onRender本身,但我不知道语法应该如何。

// Field used on the sales results view
    var dateFromFilter = $("#dateFromFilter")
    .fdatepicker($.extend({}, datepickerCommonOptions, {
        onRender: function(date) {
            if (!$("dateFromFilter").hasClass("unlimitedDateFilter")) {
                return date.valueOf() < now.valueOf() ? "disabled" : "";
            }
        }
    }))
    .on("changeDate", function(ev) {
        if (ev.date.valueOf() > dateToFilter.date.valueOf()) {
            var newDate = new Date(ev.date);
            newDate.setDate(newDate.getDate() + 1);
            dateToFilter.update(newDate);
        }
        dateFromFilter.hide();
        $("#dateToFilter")[0].focus();
    })
    .data("datepicker");

0 个答案:

没有答案