将自定义功能dijit.Calendar迁移到dijit.form.DateTextBox

时间:2014-02-28 09:03:16

标签: calendar dojo

我有一个平面日历,可以突出节日和事件

当日历更改月份时,它将获取日历呈现的统计信息(选定月份)。

MyCalendar2._setCurrentFocusAttrOld = MyCalendar2._setCurrentFocusAttr;
MyCalendar2._setCurrentFocusAttr = function(d) {
    //Loading the new month monthStat via the UI / KB / SelectBox
    var cbFunc = function(){    MyCalendar2._setCurrentFocusAttrOld(d); };
    getMonthlyStat( dateStr(d), cbFunc);
}

我的问题在于:如何在DateTextBox中实现此功能?

目标:DateTextBox可以突出显示假日,在更改月份时自动获取假日。

这是jsfiddle

1 个答案:

答案 0 :(得分:1)

dijit/form/DateTextBox允许您指定要用于其弹出日历的自定义类。因此,如果您要更改代码以实际创建dijit/Calendar的扩展名,则可以将其传递给popupClass实例上的DateTextBox

以下是您可以将一些代码重新排列到扩展程序中的方法:

var CustomCalendar = declare(Calendar, {
    getClassForDate: function(d) {
        //mark the cell in different color to present tight
        var ds = dateStr(d);
        if( !isEmptyStr(calData[ds]) )
            return 'mystyle_' + calData[ds];
    },

    _setCurrentFocusAttr: function(d) {
        var self = this,
            args = arguments;

        getMonthlyStat(dateStr(d), function(){
            self.inherited(args);
        });
    }
});

然后实例化使用它的DateTextBox

var textbox = new DateTextBox({
    popupClass: CustomCalendar,
    constraints: constraints
}, "textbox");

更新了小提琴:http://jsfiddle.net/W4ze7/2/

您还可以考虑将您的实用程序功能移动到扩展中,遵循为其名称添加下划线的前缀,以表明它们是供内部使用的。