代码之家  ›  专栏  ›  技术社区  ›  user3042268

Javascript/SAPUI5:将JSONArray绑定到ListItem

  •  2
  • user3042268  · 技术社区  · 8 年前

    我有一个SAPUI5应用程序可以查看DBMS中的数据: DMBS<-&燃气轮机;Java<-&燃气轮机;jsp->ajax->JSONModel<-&燃气轮机;SAPUI5 我对这种结构的模型有一个问题:

    [
      {
        "key1": "value_a",
        "key2": "value_b",
        "key3": "value_c",
      },
      {
        "key1": "value_d",
        "key2": "value_e",
        "key3": "value_f",
      },
    ...
    ]
    

    这些数据存储在清单中定义的模型中。json。 现在我想在列表中显示这些数据。在我的视图中,我在createContent函数中定义了一个列表,并将其添加到我的页面中。 在控制器中,我尝试将数据绑定到listitem:

    var oItemTemplate = new sap.m.InputListItem({
       label : "{Model>}"
    }),
    oList.bindItems("Model>/", oItemTemplate);
    

    在这次尝试中,与我的模型中的对象数相对应的listitems的计数是正确的。但列表中只有“对象”

    List

    我的计划是在一个列表项中显示来自一个对象的合并文本:

    • 项目1:“value\u a value\u b value\u c”
    • 第2项:“value\u d value\u e value\u d”
    • 。。。

    现在,我为标签使用格式化程序。

    label : {
        path : "Model>/",
        formatter : function(data) {
    
            return data;
        }
    }
    

    根据新代码,列表中显示的项目数量仍然正确,每个项目都包含所有项目

    List with formatter

    但如何访问对象数据key1、key2和key3?我所有的尝试都失败了

    console.log(data.key1) -> undefined
    
    console.log(data/key1) -> ReferenceError: key1 is not defined
    

    谁能帮帮我吗?

    当做

    麦克劳德

    PS: 如果我使用

    var oItemTemplate = new sap.m.InputListItem({
        label : "{Model>key1}"
    });
    oList.bindItems("Model>/", oItemTemplate);
    

    然后,value\u a/value\u d将显示在列表项上。 但我不能将此用于格式化程序

    在格式化程序中

    formatter : function(data) {
    
       return data;
    }
    

    数据对象包含完整的JSON数据。但是没有像使用普通绑定那样的自动迭代

    label : "{Model>key1}"
    
    2 回复  |  直到 8 年前
        1
  •  0
  •   Karl Scholze    8 年前

    在列表的图片中,您可以看到,每一行都是对象列表。在此对象中,您可以访问键。所以在第一步中,你必须访问对象,就像 data[0] data[1] 等等我认为你错过了层次结构中的一步。

        2
  •  0
  •   user3042268    8 年前

    问题解决了!

    var oItemTemplate = new sap.m.InputListItem({
        label : {
        parts : [
            { path : "Model>key1" },
            { path : "Model>key2"}
        ],
        formatter : function(key1, key2) {
            return key1 + " " + key2;
        }
    }
    oList.bindItems("Model>/", oItemTemplate);
    

    https://archive.sap.com/discussions/thread/3517535