为日历绑定selectedDates Aggregation

时间:2018-01-01 07:30:52

标签: sapui5

我尝试将日期数组绑定到sap.ui.unified.Calendar,但没有成功。我相信我离解决方案并不远。

以下是代码:

var oCal = new sap.ui.unified.Calendar();
var oModel2 = new sap.ui.model.json.JSONModel([
    {myDate: new Date("2018-01-10"), tt:""},
    {myDate: new Date("2018-01-11"), tt:""},
    {myDate: new Date("2018-01-12"), tt:""},
]);
sap.ui.getCore().setModel(oModel, "MyData3");
var oItemTemplate = new sap.ui.unified.DateRange({
    startDate: "{MyData3>myDate}",
    endDate: "{MyData3>myDate}"
});     
oCal.bindAggregation("selectedDates", "MyData3>/", oItemTemplate);

我没有任何例外。该模型的数据填充了3个Date类型的对象,但我没有在日历中预先选择这3个日期。

如果我手动填写selectedDates聚合(没有绑定),它将选择这3个日期。

1 个答案:

答案 0 :(得分:0)

这是一个有用的最小例子:



sap.ui.getCore().attachInit(() => sap.ui.require([
  "sap/ui/unified/Calendar",
  "sap/ui/unified/DateRange",
  "sap/ui/model/json/JSONModel",
], (Calendar, DateRange, JSONModel) => new Calendar({
  singleSelection: false
}).bindAggregation("selectedDates", {
  path: "MyData3>/",
  template: new DateRange({
    startDate: "{MyData3>myDate}",
    endDate: "{MyData3>myDate}",
  }),
}).setModel(new JSONModel([
  {myDate: new Date("2018-01-10")},
  {myDate: new Date("2018-01-11")},
  {myDate: new Date("2018-01-13")},
]), "MyData3").placeAt("content")));

<script src="https://openui5.hana.ondemand.com/resources/sap-ui-core.js" id="sap-ui-bootstrap"
  data-sap-ui-libs="sap.ui.unified"
  data-sap-ui-preload="async"
  data-sap-ui-theme="sap_belize"
  data-sap-ui-compatVersion="edge"
></script><body id="content" class="sapUiBody sapUiSizeCompact"></body>
&#13;
&#13;
&#13;

我认为你问题中提供的代码并不是你项目的真正摘录。否则,您有一个ReferenceError表示变量oModel未定义(而是定义了oModel2)。除此之外,绑定不起作用的实际原因必须是因为模型设置在核心上而Calendar控件是ComponentContainer的后代。在这种情况下,Core模型不会传播到Component。

- &GT; Avoid setting models on the Core if the app is component-based.

如果尚未完成:为了首先显示多个选定日期,必须明确禁用日历属性singleSelection,因为默认情况下已启用它。