Sapui5 如何将日历和两个时间选择器正确绑定到sap.m.表?
目前我正在学习SAPUI5,并为自己创建了一个小应用程序,以便在实践中学习。在回答我的问题之前,我将提供一些关于我的应用程序的简短信息,这样你就知道我正在尝试做什么,以及预期的结果 应用程序的功能是什么? 这个应用程序所做的唯一事情就是为用户提供一个日历和一个表。如果用户单击某个日期,则表中应填写此日期和两个时间选择器,以给出所选日期的开始和结束时间。应为每个日期创建一个新行 实际问题: 我想这是一个设计问题。桌子上满是日期和时间选择器,但我这样做的方式是,我想这是一种糟糕的做法。我将所选日期存储在两个模型中,一个用于日历,另一个用于将其绑定到表。有效期和日期已保存,我可以通过模型访问数据。当一个新日期添加到表中时,两个时间选择器也会被添加,因为它们在XML视图的ColumnListItem中提供,但是没有模型绑定到它们,我也无法访问时间选择器的值,例如通过ID。问题是,直到现在,我还没有找到合适的方法来将它们绑定到模型或其他干净的方法,也没有找到访问所创建的计时器值的方法 问题: 您将如何以干净的方式实现这一点,以便时间选择器以正确的方式绑定到一个或多个模型?你可以访问他们的数据吗?如果您能给我一个建议或提示,我应该如何以一种干净的方式实现这一点,我将不胜感激,因为我想从中吸取教训,不想为了在较短的时间内实现目标而开始使用不良做法 相关源代码: 控制器:Sapui5 如何将日历和两个时间选择器正确绑定到sap.m.表?,sapui5,Sapui5,目前我正在学习SAPUI5,并为自己创建了一个小应用程序,以便在实践中学习。在回答我的问题之前,我将提供一些关于我的应用程序的简短信息,这样你就知道我正在尝试做什么,以及预期的结果 应用程序的功能是什么? 这个应用程序所做的唯一事情就是为用户提供一个日历和一个表。如果用户单击某个日期,则表中应填写此日期和两个时间选择器,以给出所选日期的开始和结束时间。应为每个日期创建一个新行 实际问题: 我想这是一个设计问题。桌子上满是日期和时间选择器,但我这样做的方式是,我想这是一种糟糕的做法。我将所选日期存
var CalendarController = Controller.extend("sap.ui.unified.sample.CalendarMultipleDaySelection.CalendarMultipleDaySelection", {
oFormatYyyymmdd: null,
oModel: null,
onInit: function(oEvt) {
this.oFormatYyyymmdd = sap.ui.core.format.DateFormat.getInstance({
pattern: "dd.MM.yyyy",
calendarType: sap.ui.core.CalendarType.Gregorian
});
this.oModel = new JSONModel({
selectedDates: []
});
this.oCopyModel = new JSONModel({
selectedDates: []
});
var oCalendar = this.getView().byId("calendar");
oCalendar.setModel(this.oModel);
},
handleCalendarSelect: function(oEvt) {
var oCalendar = oEvt.oSource;
var aSelectedDates = oCalendar.getSelectedDates();
console.log(aSelectedDates);
var oDate;
var oData = {
selectedDates: []
};
var oTable = this.getView().byId("dateTable");
if (aSelectedDates.length > 0) {
for (var i = 0; i < aSelectedDates.length; i++) {
oDate = aSelectedDates[i].getStartDate();
oData.selectedDates.push({
Date: this.oFormatYyyymmdd.format(oDate)
});
}
this.oModel.setData(oData);
if (this.oCopyModel.getProperty("/selectedDates/length") >= 0) {
this.oCopyModel.setData(oData);
oTable.setModel(this.oCopyModel);
}
} else {
this._clearModel();
}
},
return CalendarController;
var CalendarController=Controller.extend(“sap.ui.unified.sample.CalendarMultipleDaySelection.CalendarMultipleDaySelection”{
OfFormatyyyyymmdd:null,
oModel:null,
onInit:功能(oEvt){
this.oFormatYyyymmdd=sap.ui.core.format.DateFormat.getInstance({
模式:“dd.MM.yyyy”,
calendarType:sap.ui.core.calendarType.Gregorian
});
this.oModel=新的JSONModel({
选定日期:[]
});
this.oCopyModel=新的JSONModel({
选定日期:[]
});
var oCalendar=this.getView().byId(“日历”);
setModel(this.oModel);
},
handleCalendarSelect:功能(oEvt){
var oCalendar=oEvt.oSource;
var aSelectedDates=oCalendar.getSelectedDates();
控制台日志(一个选定的日期);
变节;
变量oData={
选定日期:[]
};
var oTable=this.getView().byId(“日期表”);
如果(aSelectedDates.length>0){
对于(变量i=0;i=0){
这个.oCopyModel.setData(oData);
oTable.setModel(this.oCopyModel);
}
}否则{
这个;
}
},
返回日历控制器;
视图:
问候
Maximilian我创建了一个小示例: 有几点:
- 我只是在所选日期中添加了一些属性(
和startTime
)。您现在可以使用时间选择器修改时间,更改存储在模型中endTime
- 日历的数据绑定似乎已损坏。我还必须使用
。这可能是由于getSelectedDates
。使用single selection时,您可以通过数据绑定访问所选日期(或间隔)singleSelection=“false”
- 永远不要访问内部属性(
)。此属性有访问器(oEvt.oSource
)oEvt.getSource()
- 我只是在所选日期中添加了一些属性(
和startTime
)。您现在可以使用时间选择器修改时间,更改存储在模型中endTime
- 日历的数据绑定似乎已损坏。我还必须使用
。这可能是由于getSelectedDates
。使用single selection时,您可以通过数据绑定访问所选日期(或间隔)singleSelection=“false”
- 永远不要访问内部属性(
)。此属性有访问器(oEvt.oSource
)oEvt.getSource()
<content>
<unified:Calendar id="calendar" select="handleCalendarSelect" intervalSelection="false" singleSelection="false"/>
<Table id="dateTable" items="{path: '/selectedDates', sorter: {path: 'Date', comparator: '.dateComperator'}}"mode="None" fixedLayout="true">
<columns>
<Column>
<header>
<Text text="Date"/>
</header>
</Column>
<Column>
<header>
<Text text="Beginning"/>
</header>
</Column>
<Column>
<header>
<Text text="End"/>
</header>
</Column>
</columns>
<ColumnListItem>
<Text text="{Date}"/>
<TimePicker value="10:00" valueFormat="HH:mm" displayFormat="HH:mm" change="handleChange"/>
<TimePicker value="11:00" valueFormat="HH:mm" displayFormat="HH:mm" change="handleChange"/>
</ColumnListItem>
</Table>