【问题标题】:Dojo Dijit Calender widget disable all dates except for select few using isDisabledDateDojo Dijit 日历小部件禁用所有日期,除了少数使用 isDisabled 日期
【发布时间】:2013-05-30 22:47:46
【问题描述】:

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

情况:

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

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

直观地说,在伪代码中,我想做这样的事情:

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 模块同样的事情在我的代码中的其他地方也有效,但当它被 dijit 小部件调用时却无效?

  • 除了日历视图更改之外,如何在数据更改时运行逻辑?

【问题讨论】:

    标签: javascript date calendar dojo


    【解决方案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>
    

    【讨论】:

    • 我真的很难理解道场的逻辑。我已经为 isDisabledDate 编写了一个函数,但我仍然有两个问题: - 日历刷新日期的时间仍然与日历本身相关。 (即:当您加载日历或翻阅其页面时计算禁用日期)。如何随时刷新禁用的日期,而不是在日历重新绘制时? - 我在函数中使用 date.compare 时遇到问题。如果我使用任何要求,那东西就行不通了。我将编辑原件以显示这一点。感谢您的帮助
    • 日历的禁用日期设置一次,创建日历时,您可以通过调用日历小部件的_populateGrid()来刷新它们,您不能启用单个日期。 jsfiddle.net/BvwmL
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多