应用Formatter后DateRangeSelection的数据绑定失效问题
DateRangeSelection绑定Formatter后日期同步失效的解决方案
问题核心:直接给dateValue/secondDateValue的绑定配置formatter时,默认仅做单向格式化(模型值转显示值),缺少反向解析逻辑,导致用户选择新日期后无法同步回模型,绑定功能失效。
推荐方案:使用UI5内置日期类型
用sap.ui.model.type.Date替代自定义formatter,UI5会自动处理双向绑定的格式化与解析逻辑,代码更简洁可靠:
<DateRangeSelection id="DateRangeTest2" dateValue="{ path: '/FROM_DATE', type: 'sap.ui.model.type.Date', formatOptions: { source: { pattern: 'yyyy-MM-dd' }, pattern: '{/DATE_STYLE}' } }" secondDateValue="{ path: '/END_DATE', type: 'sap.ui.model.type.Date', formatOptions: { source: { pattern: 'yyyy-MM-dd' }, pattern: '{/DATE_STYLE}' } }" valueFormat="yyyy-MM-dd" />
source.pattern:匹配模型中存储的日期格式(yyyy-MM-dd)pattern:绑定到视图模型的DATE_STYLE,控制日期显示格式
备选方案:自定义双向Formatter
如果必须使用自定义逻辑,需要在绑定中同时指定formatter(格式化)和parser(反向解析),并显式开启双向绑定:
1. 控制器中定义格式化与解析函数
// 模型日期(yyyy-MM-dd字符串)转显示格式 dateFormatter: function(value) { if (!value) return ""; const date = new Date(value); const displayStyle = this.getView().getModel().getProperty("/DATE_STYLE"); return sap.ui.core.format.DateFormat.getDateInstance({ pattern: displayStyle }).format(date); }, // 用户选择的日期对象转模型格式(yyyy-MM-dd字符串) dateParser: function(value) { if (!value) return null; return sap.ui.core.format.DateFormat.getDateInstance({ pattern: "yyyy-MM-dd" }).format(value); }
2. XML中配置双向绑定
<DateRangeSelection id="DateRangeTest2" dateValue="{ path: '/FROM_DATE', formatter: '.dateFormatter', parser: '.dateParser', mode: 'TwoWay' }" secondDateValue="{ path: '/END_DATE', formatter: '.dateFormatter', parser: '.dateParser', mode: 'TwoWay' }" valueFormat="yyyy-MM-dd" displayFormat="{/DATE_STYLE}" />
通过mode: 'TwoWay'开启双向绑定,parser函数负责将组件返回的日期对象转换为模型所需的字符串格式,确保选择的日期能同步回模型。
内容的提问来源于stack exchange,提问作者andreiw
相关产品推荐
相关产品推荐

