我试图将一组日期绑定到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个日期。
这是一个有用的最小例子:
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>
我假设你问题中提供的代码不是你项目的真正摘录。否则,你会得到一个ReferenceError,说明变量oModel
是未定义的(相反,定义了oModel2
)。除此之外,绑定不起作用的实际原因必须是因为模型设置在核心上而Calendar控件是ComponentContainer的后代。在这种情况下,Core模型将不会传播到Component。
- > Avoid setting models on the Core if the app is component-based.
如果尚未完成:为了在第一个位置显示多个选定日期,必须明确禁用Calendar属性singleSelection
,因为它默认情况下已启用。