You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

应用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 23:27:25