表中已更改的复选框未更新模型

2020-08-18 14:10发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,

使用表格sap.m.Table中的复选框时遇到问题(不适用于行选择;只能选择某些行)。 如果我更改复选框的状态(在UI中单击:),则不会更新模型,并且 this.getModel()。submitChanges(); 不会提交任何内容。 我尝试了几种方法,但没有解决任何问题。 (表中还包含一些输入字段,对这些输入字段的任何更改都存储在模型中,submitChanges会触发正确的OData调用。)

当前代码(版本1):

 var checkBox = new sap.m.CheckBox({
    可编辑:true,
    可见:" {= $ {placed} ==='1'}",
    已选择:" {= $ {picked} ==='1'}"
 }); 

==>表格显示具有正确值的复选框

版本2:

 var checkBox = new sap.m.CheckBox({
    可编辑:true,
    可见:" {= $ {placed} ==='1'}",
 });

 checkBox.bindProperty(" selected",{
    targetType:"布尔值",
    路径:"已选择",
    模式:" sap.ui.model.BindingMode.TwoWay"
 }); 

==>表中未显示任何数据(显示了加载指示器,但未发生任何事情); 控制台未显示任何相关错误; 如果使用s 选出,结果相同:" {path:'picked',type:'sap.ui.model.type.Boolean'}"

有人提示如何解决该问题吗?

谢谢!

致谢

Karsten

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,

使用表格sap.m.Table中的复选框时遇到问题(不适用于行选择;只能选择某些行)。 如果我更改复选框的状态(在UI中单击:),则不会更新模型,并且 this.getModel()。submitChanges(); 不会提交任何内容。 我尝试了几种方法,但没有解决任何问题。 (表中还包含一些输入字段,对这些输入字段的任何更改都存储在模型中,submitChanges会触发正确的OData调用。)

当前代码(版本1):

 var checkBox = new sap.m.CheckBox({
    可编辑:true,
    可见:" {= $ {placed} ==='1'}",
    已选择:" {= $ {picked} ==='1'}"
 }); 

==>表格显示具有正确值的复选框

版本2:

 var checkBox = new sap.m.CheckBox({
    可编辑:true,
    可见:" {= $ {placed} ==='1'}",
 });

 checkBox.bindProperty(" selected",{
    targetType:"布尔值",
    路径:"已选择",
    模式:" sap.ui.model.BindingMode.TwoWay"
 }); 

==>表中未显示任何数据(显示了加载指示器,但未发生任何事情); 控制台未显示任何相关错误; 如果使用s 选出,结果相同:" {path:'picked',type:'sap.ui.model.type.Boolean'}"

有人提示如何解决该问题吗?

谢谢!

致谢

Karsten

付费偷看设置
发送
3条回答
callcenter油条
1楼 · 2020-08-18 14:53.采纳回答

借助 Boghyon Hoffmann

的最终解决方案
 getBooleanStringType:function(){
    return sap.ui.model.SimpleType.extend(" BooleanStringType",{
       formatValue:函数{
          return s ===" 1";
       },
       parseValue:函数(s){
          返回s?  " 1":" 0";
       },
          validateValue:函数{}
    });
 },

 ...


 var BooleanType = this.getBooleanStringType();

 var checkBox = new sap.m.CheckBox({
 可编辑:true,
 可见:" {= $ {placed} ==='1'}"
 });

 checkBox.bindProperty(" selected",{
 类型:new BooleanType(),
 路径:"已选择"
 });
 
吹牛啤
2楼-- · 2020-08-18 14:33

谢谢,现在一切正常。

能不能别闹
3楼-- · 2020-08-18 14:35

这是一个有效的示例: https://embed.plnkr.co/wwQXf8bTuiTP4RlP

具有表达式绑定或 formatter ,绑定模式变为单向(即,模型更改会传播到UI,而不会传播到UI)。

为了让 框架知道如何解析用户输入并将其存储在模型中,从而启用双向绑定,您必须分配一个适当的数据类型到绑定信息。

还请记住,如果要为绑定模式分配有效的枚举值 模型的默认绑定模式尚未在TwoWay中:

 bindProperty({
  //...
   模式:" TwoWay"//而不是" sap.ui.model ..."
 }); 

___

如果可能的话,最好的解决方案当然是将实体属性类型更改为Edm.Boolean(在您的情况下,对于"选择"和"放置" "属性。请参见$ metadata)。 这样,您就可以使用标准的sap.ui.model.odata.type.Boolean,而无需创建自定义解决方案。

一周热门 更多>