【问题标题】:How to color months in sap.m.DatePicker?如何在 sap.m.DatePicker 中为月份着色?
【发布时间】:2019-08-22 19:15:18
【问题描述】:

我正在使用sap.m.DatePicker,我想更改某些月份的颜色(月份项目的背景颜色)。

我尝试在style.css 文件中更改sapUiCalItem 的背景颜色。我将这个类添加到我的 CSS 文件中,但这会改变我拥有的所有 datePicekers 的颜色。

.sapUiCalItem{
  background-color: #920000;
}

然后我在 DatePicker 中添加了类

<m:DatePicker
  id="datePickerId"
  class="datePickerClass"
  value="{period}"
  valueFormat="YYYY-MM-DD"
  displayFormat="MMMM yyyy"
  change="onChangeDate"/>

并像这样更改 CSS

.datePickerClass.sapUiCalItem{
  background-color: #920000 !important;
}

另外,我尝试添加这样的类

self.getView().byId("datePickerId").addStyleClass("datePickerClass");

但这也没有用。 sap.m.DatePicker 有没有办法给这个月上色?

【问题讨论】:

  • 向 DatePicker 实例添加类是没有用的,因为月份显示在单独的弹出窗口中,从技术上讲,它位于 datepicker 的
    标记之外(实际上它更接近生成的 HTML 的头部) . DatePicker 有一个“受保护”的属性 this._oCalendar,从技术上讲,您可以使用它访问月份。但是,好吧,它是受保护的
  • 我认为没有简单的方法。您可以尝试将 MonthPicker 子类化并编写一个新的 MonthPickerRenderer,然后将 Calendar 子类化以使用您的新 MonthPicker,然后将 DatePicker 子类化以使用您的新日历。
  • 另外,如果您“硬编码”颜色,当用户更改主题时,您可能会遇到问题。在这种情况下最好使用语义颜色(experience.sap.com/fiori-design-web/how-to-use-semantic-colors
  • 您使用的是哪个 UI5 版本?
  • @inizio 我使用的是 1.68

标签: css datepicker sapui5


【解决方案1】:

您可以通过将事件附加到月份按钮attachPressButton1 来实现。 打开月份布局后,将突出显示相应的月份。

假设你知道月份的颜色就好了 var oMonths = { 0:"Red", 6:"Green", 11: "yellow"};。其中 0 - 一月,1 - 二月... 11 - 十二月。根据您的要求修改此 oMonths 对象和相应的月​​份颜色。

view.XML

<DatePicker id="dpColoufulMonths" placeholder="Enter Date ..."/>

Controller.js

var oDP = this.byId("dpColoufulMonths");
if (oDP) {          
    oDP._openPopup = function() {
        if (!this._oPopup) {
            return;
        }
        this._oPopup.setAutoCloseAreas([this.getDomRef()]);
        var k = sap.ui.core.Popup.Dock;
        var A;
        if (this.getTextAlign() == sap.ui.core.TextAlign.End) {
            A = k.EndBottom + '-4';
            this._oPopup.open(0, k.EndTop, A, this, null, 'fit', true);
        } else {
            A = k.BeginBottom + '-4';
            this._oPopup.open(0, k.BeginTop, A, this, null, 'fit', true);
        }
        //Custom implementation for color update
        var oDatePopup = this._oPopup.getContent();
        if (oDatePopup) {
            var oDatePopupHdr = this._oPopup.getContent().mAggregations.header;
            var oMonths = { 0:"Red", 6:"Green", 11: "yellow"};
            if (oDatePopupHdr) {
                oDatePopupHdr.attachPressButton1(function(oEvent) { //Month textButton
                    for (var m in oMonths) {
                        var sMonthID = "#" + oDatePopup.mAggregations.monthPicker.sId + "-m" + m;
                        jQuery(sMonthID).css({"background-color" : oMonths[m]}); //inline styling 
                        //jQuery(sMonthID).addClass("month"+oMonths[m]);// Adding the style class and styled it in CSS file
                    }
                });
            }
        }           
    }
}

输出

【讨论】:

    猜你喜欢
    相关资源
    最近更新 更多
    热门标签