有条件地在对象中定义参数

Define Parameter in Object conditionally

我正在使用 framework7 日历,在声明日历时,我需要根据使用 php 动态生成的输入中的当前日期值来设置值。这行得通,但问题是当未设置日期时,空字符串不应将日期定义为 1969 年 12 月 31 日。我已尝试根据 if 语句发送空值,但它也不起作用。该功能起作用的唯一方法是设置有效日期或未完全设置参数。问题是如何更改以下内容以仅在不为空或不为空时声明值参数。

    if($('input[name=session-date]').val()!=""){
        sessionDate = Date.parse($('input[name=session-date]').val());
        alert("sessionDate set");
    } else {
        sessionDate = null;
        alert("sessionDate NOT set");
    }
    //define call to calendar function with parameters
    var calendarInline = myApp.calendar({
        value: [sessionDate],
        //etc.,
    });

我试过:

    if($('input[name=session-date]').val()!=""){
        sessionDate = Date.parse($('input[name=session-date]').val());
        alert("sessionDate set");
    } else {
        sessionDate = null;
        alert("sessionDate NOT set");
    }
    //define call to calendar function with parameters
    var calendarInline = myApp.calendar({
        if(sessionDate){
            value: [sessionDate],
        }
        //etc.,
    });

您不能在对象定义内有条件地设置对象参数,但您可以在 myApp.calendar 内执行 IIFE,即 returns 您的对象,如下所示:

var calendarInline = myApp.calendar((function() {
    var obj = {
        //values...
    }

    if(sessionDate) {
        obj.value = [sessionDate];
    }

    return obj;

})())

或者,您可以在初始化 calendarInline 之前创建并有条件地构造您的对象,然后将对象传递给 myApp.calendar()

有两种方法可以使用默认值调用函数。在 ES6 中你有参数的默认值,或者在 ES5 中你可以使用一些逻辑短路。所以首先你创建一个包装函数来调用你的库方法。

在 ES6 中你可以这样做;

var celendarCall = function(sd = myBirthDay) {myApp.calendar({value:[sd],...})},
  calendarInline = calendarCall(sessionDate);

因此,如果您不为 calendarCall 提供参数,它将使用 myBirthDay 作为默认值。

或者在 ES 5 中你可以做同样的事情

var celendarCall = function(sd) {myApp.calendar({value:[sd],...})},
  calendarInline = calendarCall(sessionDate || myBirthDay);

所以如果 sessionDateundefined 或任何错误的东西,它将使用 myBirthDay 作为调用 calendarCall 函数的默认参数。