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

时间:2016-06-12 02:44:52

标签: javascript object syntax-error declaration

我正在使用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.,
    });

2 个答案:

答案 0 :(得分:2)

您无法在对象定义中有条件地设置对象参数,但您可以在myApp.calendar内执行IIFE,它会返回您的对象,如下所示:

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

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

    return obj;

})())

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

答案 1 :(得分:0)

有两种方法可以使用默认值调用函数。在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函数。