为什么我需要升级
我需要具有禁用导航到某个日期之后的日期的功能,所以我正在考虑从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()
检查相同内容
但我在今天下载的新版本的演示中没有看到帮助脚本。我尝试删除包含旧版本的所有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.
...
}
任何想法的人?
由于
赏金开始
找到了一个不太好的,未经优化的解决方案,将其发布在答案中,但仍在寻找合适的解决方案。
答案 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;"> </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/(请查看trigger
和cont
参数,其中一个参数是必需的。
我应用了一些脏修复来做同样的事情,因此必须编写代码来做一些其他由插件自动完成的事情(例如,在输入字段上显示所选日期=日期,显示日历)。