如何获得有关DatePicker ValueHelp事件的通知?

时间:2018-10-29 15:24:17

标签: sapui5

我需要知道何时按下DatePicker的值帮助按钮并显示日历。

datepicker button that fires event (open calendar)

但是文档中没有关于如何执行此操作的参考。

4 个答案:

答案 0 :(得分:2)

您可以使用Navigation事件来执行此操作。首先,在视图中声明datepicker(在xml视图的下面的示例中),并为Navigation事件提供回调。

<DatePicker id="some_date" navigate="onClickDate"/>

然后,在此视图的控制器中为回调函数声明。

onClickDate: function(){
    //do something
}

希望这会有所帮助。

答案 1 :(得分:1)

您可以使用navigate事件,但是每次用户在日历中导航时,该事件也会再次触发。

从技术上讲,您可以使用值帮助图标(press)的oDatePicker._getValueHelpIcon().attachPress()事件,但是由于它使用控件的私有方法,因此可能会对此感到不满意。

答案 2 :(得分:1)

您可以使用“ isOpen()” 来显示日期,或使用“ getValue()” 来获取日历上最后选择的值并由日历返回。更改事件,此处提供其他方法>> DatePicker Methods

//DatePicker View.js
var datePicker = new DatePicker(this.createId("calendarSelect"), {
  width: "80%",
  maxDate: new Date(),
  valueFormat: "yyyy-MM-dd",
  displayFormat: "long",
  change: function() {
    oController.someFunction();
  },
  value: new Date().toDateString("en-GB")
});

//DatePicker Controller.js
someFunction: function() {
  console.log(this.getView().byId("calendarSelect").isOpen()); // returns true or false when the calendar is open 
  console.log(this.getView().byId("calendarSelect").getValue()); //to get value selected 
}

答案 3 :(得分:1)

从1.62 commit 开始,navigate event提供了一个附加标志参数"afterPopupOpened",仅在选择器刚刚打开时才设置为true 。否则,当用户仅在日历中导航时,它通常是false

这是一个演示:

sap.ui.getCore().attachInit(() => sap.ui.require([
  "sap/m/DatePicker",
  "sap/m/MessageToast",
], (DP, MsgToast) => new DP({
  placeholder: `Press F4 or click on the icon -->`,
  navigate: e => e.getParameter("afterPopupOpened") && MsgToast.show("Calendar opened!"),
}).setWidth("16rem").placeAt("content")));
<script id="sap-ui-bootstrap"
  src="https://openui5nightly.hana.ondemand.com/resources/sap-ui-core.js"
  data-sap-ui-libs="sap.ui.core, sap.m, sap.ui.unified"
  data-sap-ui-async="true"
  data-sap-ui-theme="sap_belize"
  data-sap-ui-compatversion="edge"
  data-sap-ui-xx-waitfortheme="true"
></script>
<body id="content" class="sapUiBody sapUiSizeCompact" style="height: 100%;"></body>

Get notified when the Calendar opens