Персонализирано оцветяване на gridcell в dijit.calendar и запазването му постоянно

Използвам dojo 1.6 и използвам dijit.calendar в проект и работи чудесно, с изключение на целта за оцветяване на избрана клетка от мрежата. Имам три вътрешни HTML, които се манипулират от кликванията в календара. Няма проблем там.

Поведението на dijit.calendar е да маркира клетка от мрежата (календарен ден) като синя при щракване и когато се щракне върху друга клетка от мрежата, тя става синя. Това, което бих искал да направя, е да оцветя клетката в персонализиран цвят, когато се щракне върху нея, и тя да остане постоянна.

По-конкретно, календарът е за проект, който има официална дата (синьо), начална дата (зелено) и крайна дата (червено).

Дори не съм наясно, че има начин да се оцвети конкретна мрежова клетка в dijit.calendar. Някой успял ли е да направи това или има указател, който да ме изпрати в правилната посока?

Редактирайте по-долу:..

Добре, хора, имам доста добра представа къде да отида с това благодарение на Филип по-долу. Решението на Philippe ще оцвети клетката ТОЧНО както е предназначено (така че той има отговора на кармата). Оказва се, че ако избрана клетка от мрежата е червена и превключа към месеца, за да избера следваща дата, клетката остава червена.

Разбрах повечето от тях. Мога да оцветя, да речем, успешно първите две дати, но ако трябва да направя нещо като въвеждане на трета дата през следващия месец и промяна на календара, клетките остават оцветени. Така че ще трябва да има начин да променя промяната на цвета си на отделна стойност, която съответства на действителната дата.

Знам, че onChange, че единственият върнат аргумент е самата дата по този начин (с помощта на debug.console във Firebug).....

[Date {Wed Jan 18 2012 00:00:00 GMT-0500 (EST)}]

Проверих кода чрез Firebug и забелязах в същата клетка, че кодът изглежда така....

<td role="gridcell" class="dijitCalendarSelectedDate dijitCalendarCurrentMonth    dijitCalendarDateTemplate" dijitdatevalue="1326866400000" style="background-color: green;" tabindex="0"><span class="dijitCalendarDateLabel">18</span></td>

Тази отделна стойност изглежда е "dijitdatevalue".

Предполагам, че мога да следвам верига от ......

при щракване запазете "dijitdatevalue" на първата дата в скрито поле (както и втората и третата дата). След това се върнете назад и задайте цвета на фона на съответната dijitdatevalue на синьо, зелено или червено.

Въпросът сега е как да върна низа dijitdatevalue в скрито поле. Ще актуализирам тази публикация отново, когато разбера отговора.

Джани


person Jane Wilkie    schedule 29.12.2011    source източник


Отговори (1)


Ако погледнете кода на притурката, ще видите частен метод, наречен _onDayMouseDown, който е отговорен за превръщането на клетката в синьо... Можете да добавите персонализирания си код към тази функция чрез dojo.connect, като това:

dojo.connect(dijit.byId('calendar1'), "_onDayMouseDown", function(/*Event*/ evt){
   var node = evt.target.parentNode;
   dojo.style(node, "backgroundColor", "green");
});

В противен случай, ако използвате dojo 1.7, можете да опитате MultiSelectCalendar

person Philippe    schedule 30.12.2011
comment
Благодаря Филип. Редактирах публикацията си по-горе, за да включа допълнителна информация. Ти беше мъртъв. Изглежда, че ще трябва да свържа оцветяването си с различен идентификатор на дата (dijitdatevalue) вместо клетка на мрежата, тъй като когато промените месеците, клетките на мрежата остават със същия цвят. Изглежда, трябва да измисля нещо по-динамично. - person Jane Wilkie; 04.01.2012