无法从旧的jscalendar彻底升级到新的jscal2版本

时间:2011-10-24 14:39:21

标签: javascript configuration jscalendar

为什么我需要升级
我需要具有禁用导航到某个日期之后的日期的功能,所以我正在考虑从jscalendar(http://www.dynarch.com/projects/calendar/old/)升级到jscal2(http:// www。 dynarch.com/projects/calendar/)在我的项目中。但是在主页和新jscal2的文档中,提到了以下内容 -

  
      
  • 请注意,这是一个全新的产品。

  •   
  • 请注意,它与我们的旧日历项目不兼容。

  •   

问题
所以,我很困惑,如果我当前项目中的变化很小,那么如果可能的话,那么究竟如何做到这一点。我已在网站上发表评论 - http://www.dynarch.com/projects/calendar/discussion/并等待回复。与此同时,我认为那些使用过该产品的人可能会提供帮助,所以这是我的问题。

我的项目的现有代码使用jscalendar版本1.51(我看到有这行写在calendar.js文件中 - calendar.js,v 1.51)。这些帮助程序代码有一些行,其中包含调用function showCalendar()的{​​{1}},如下所示 -

var cal = new Calendar()

http://pastebin.com/QHAb0WdB

检查相同内容

但我在今天下载的新版本的演示中没有看到帮助脚本。我尝试删除包含旧版本的所有js / css文件,包含新版本的文件,但只保留相同的jscalendar.js,但它给出了这个js错误 -

function setActiveStyleSheet()
function selected()
function closeHandler()
function showCalendar(){
    ...
    //some lines of code
    ... 
    var cal = new Calendar(1, null, selected, closeHandler);
    ...
    //some lines of code
    ... 
}
....

我猜测,我可以通过将_dynarch_popupCalendar is not defined [Break On This Error] if (_dynarch_popupCalendar != null) { param添加到新的Calendar启动中来限制过去的日期 -

onSelect

但是在帮助程序脚本中修改失败后我没有尝试任何操作。

如果您对正确的升级过程有所了解,请与我们联系。我不确定我错过了什么。

我原以为它只是改变js的包含就好了,可能是css文件,代码中不需要改变。我只需要根据需要设置一些更多的配置参数来禁用日期。

更新
让它变得更简单!!

首先进行修正,这不是升级,因为jscal2(我想使用的那个)的文档说 -

  
      
  • 请注意,这是一个全新的产品。

  •   
  • 请注意,它与我们的旧日历项目不兼容。

  •   

我了解调用日历所需的最低要求是 -

onSelect: function() {
   var date = Calendar.intToDate(this.selection.get());
   LEFT_CAL.args.min = date; // setting minimum date, so as to not allow browsing past this date
   LEFT_CAL.redraw();
   this.hide();
}
  

所有参数都是可选的。但是,你应该提供一个续   (对于内联日历)或触发弹出日历,或者提供   您自己的代码以显示弹出日历。我们会看到这是怎么回事   稍后完成。

我想我需要编写代码才能显示弹出式日历,比如这个 -

Calendar.setup({
    cont          : "calendar-container"  // a cont or a trigger
});

但是,我没有在文档中看到任何此类代码。我尝试使用此代码,但无效 -

function showCalendar(){
    ...
    //some lines of code
    ... 
    var cal = new Calendar();
    ...
    //some code to display the calendar, based on the details already being passed to this function - which button was clicked, where to attach the calendar, etc.
    ... 
}

任何想法的人?

由于

赏金开始
找到了一个不太好的,未经优化的解决方案,将其发布在答案中,但仍在寻找合适的解决方案。

1 个答案:

答案 0 :(得分:1)

回答自己,但仍在寻找合适的解决方案。我写了这段代码,以便在从jscalendar转到jsCal2之后继续使用showCalendar()函数 -

var instance = null; //tracker of calendar instances

function showCalendar(id, format, showsTime, showsOtherMonths) 
{
    //some code here


    //create a dummy holder so as to place the calendar inside, so that I can use the "cont" attribute. (Have to use either cont or trigger. )
    if(instance!=null)
    {
        instance.hide();
        instance = null;
        $("table.DynarchCalendar-topCont").remove(); //I am having to kill the earlier calendar instance on every calendar display call, because otherwise multiple instances were getting created in DOM, causing confusion. 

        //get date in input field - since earlier instance is killed

    }


if($("div#container").length == 0)
    {
        $('body').append('<div id="container" style="position: absolute;">&nbsp;</div>');
    }


        cal = new Calendar({
                cont: "container",
                inputField: id,
                dateFormat: format,
                bottomBar: false,
                min: minDateLimit,
                showTime: showsTime,
                weekNumbers: true,
                selection : intDate,
                onSelect: function() {

                    //set selected value into attached input field
                    var selectedDate = this.selection.get();
                    date = Calendar.intToDate(selectedDate);
                    date = Calendar.printDate(date, format);
                    $('#'+id).val(date);

                    this.hide();
                },
                onBlur: function() { //clicking outside hide calendar
                    this.hide();
            }
        });

    cal.moveTo(intDate); //since new instance of calendar is being created everytime, need to move to the date 
    cal.popup(id,"Br");
    instance = cal;

    return false;
}

我尝试了一些正确的方法来从内联onclick函数(此处为showcalendar()函数)启动弹出日历。但是,在新的jscal2日历的文档中,日历的启动仅支持绑定方法,并且无法从内联onclick调用的函数内部执行相同的操作。以下是文档 - http://www.dynarch.com/projects/calendar/doc/(请查看triggercont参数,其中一个参数是必需的。 我应用了一些脏修复来做同样的事情,因此必须编写代码来做一些其他由插件自动完成的事情(例如,在输入字段上显示所选日期=日期,显示日历)。