Dojo Dijit Calendar小部件禁用所有日期,除了使用isDisabled Date选择少数几个

时间:2013-05-30 22:47:46

标签: javascript date calendar dojo

我无法理解如何使用isDisabledDate属性来禁用除日期之外的所有日期。

情况:

我使用Dijit日历窗口小部件作为允许控制远程调度程序的Web应用程序的一部分。

基本上,当用户请求时,从服务器检索作业列表。如果为特定特定日期安排了作业,则应启用该日期(否则默认情况下禁用)。

直观地说,在psudo-code中,我想做这样的事情:

function onGetJobsComplete(jobs){ 
    foreach(job in jobs) {
         dijit.byId('MyCalender').enableDate(job.date);
    }
}

最终结果是,我希望用户以图形方式查看哪些日子有工作,并且能够点击这些日子获取更多信息(这部分我已经工作)。

我能找到的所有例子似乎都是根据不依赖于外部变化数据的标准(即:所有周末或某些等)来处理阻止日期

编辑:

我试过这个:

     <div id="calSJobs" data-dojo-type="dijit/Calendar" data-dojo-props="
                dayWidth:'abbr',
                isDisabledDate: disabledDates"
                />

-

function disabledDates(value){
    if(typeof dataJobs == 'undefined')
        return true;
    try {   
    for(i=0; i<dataJobs.length; i++) {
        if(dataJobs[i].cron == 'False')
        {
                jobDate = new Date(dataJobs[i].time);
                calDate = value;
                if(compareDate(jobDate, calDate)
                    return false;
        }
    }
    } catch (err) {log(err.message);}
    return true;
}

var compareDate;
require(["dojo/date"], function(date){

compareDate = function (date1, date2) {
    if(date.compare(date1, date2, 'date') == 0)
        return true;
    else
        return false;
}

});

但这有两个问题:

  • compareDate不起作用,因为我需要AMD模块如果我删除“require”的东西,它工作正常,但我不能使用date.compare。同样的事情在我的代码中的其他地方工作,但是当它被dijit小部件调用时却没有?

  • 除了日历视图发生变化之外,如何在数据发生变化时运行逻辑?

1 个答案:

答案 0 :(得分:1)

如果您创建日历,则可以添加已启用日期且不是

的逻辑
 new Calendar({
        value: new Date(),
        isDisabledDate: lang.hitch(this, function(d){
            return true;
        })
    }, "mycal"); 

这应禁用所有日期。或者,如果要启用其中一些,可以向函数添加一些逻辑,如果日期在列表中,则返回false。

顺便说一下,如果你想要内联所有日期,你可以这样做:

<div data-dojo-type="dijit.Calendar" value="20120512" data-dojo-props="isDisabledDate:function(){return true; }"></div>