动态添加 Tiles 到 TileContainer

Add Tiles to TileContainer dynamically

我想动态地将 Tiles 添加到 TileContainer

我得到了一个 JSONObject (jsonResponse),看起来像这样:

现在我想将 Tiles 添加到 TileContainer。这里的函数:

var tc = this.getView().byId("container"); //TileContainer
for (var i = 0; i < jsonResponse.length; i++) {
                    alert(jsonResponse[i].Title);
                    tc.addTile(new sap.m.StandardTile( jsonResponse[i].id, {
                        icon: "sap-icon://" + jsonResponse[i].Icon,
                        number: jsonResponse[i].Number,
                        numberUnit: jsonResponse[i].NumberUnit,
                        title: jsonResponse[i].Title,
                        info: jsonResponse[i].Info,
                        press: that.onTilePress
                    }));
}

添加了tiles,但没有任何内容。它只是白色的。 当我登录 jsonResponse[i].Title 时,我得到 jsonObject.

的值

我认为您的迭代开头不正确: for (var i = 0; i < jsonResponse.length; i++)

您应该遍历响应,此时您正在遍历单个响应的字段 jsonResponse i 的最大值等于 jsonResponse

您没有使用数据绑定,这是一个错误,因为这是 sapui5 的核心:)

首先将您的 json 数据加载到 JSONModel object

var model = new sap.ui.model.json.JSONModel({ data: jsonResponse });
this.getView().setModel(model);

然后将您的图块容器和图块绑定到您刚刚创建的模型

<TileContainer tiles={/data}>
    <StandardTile
        icon="{= 'sap-icon://' + ${Icon} }"
        number="{Number}"
        numberUnit="{NumberUnit}"
        title="{Title}"
        info="{Info}"
        press="onTilePress" />
</TileContainer>

关于标题的问题,您确定 'jsonResponse' 已加载到 JS object 中还是只是一个字符串?

这是 javascript 的示例。希望对您有所帮助。

sap.ui.controller("com.App.Home", {  
  onInit : function() {
    var oModel = new sap.ui.model.json.JSONModel({
      TileSet : [
        { "Title" : "Apple" },
        { "Title" : "Blackberry" },
     { "Title" : "Blueberry" }
      ]
    });    
    sap.ui.getCore().setModel(oModel);    
  }  
});

sap.ui.jsview("com.App.Home",{
  getControllerName: function(){
    return "com.App.Home";
  },
  createContent: function(){
    var oTileTemplate = new sap.m.StandardTile({
      icon:"sap-icon://save",
      title:"{Title}"
    });
    
    var oTileContainer = new sap.m.TileContainer().bindAggregation("tiles", "/TileSet", oTileTemplate);
    
    var oPage = new sap.m.Page({
      title: "Tile Container Dynamic Custom Tiles",
      enableScrolling: false
    }).addContent(oTileContainer);
    var app = new sap.m.App();
    app.addPage(oPage);
    return app;
  }
});

var oView = sap.ui.view({
  id: "jsview1",
  viewName: "com.App.Home",
  type: sap.ui.core.mvc.ViewType.JS
}).placeAt("content");
<html>
  <head>
    <meta name="description" content="Tile Container Dynamic Custom Tiles - JS View" />
    <title>Tile Container Dynamic Custom Tiles - JS View</title>
    <script
      src="https://sapui5.hana.ondemand.com/resources/sap-ui-core.js"        
      id="sap-ui-bootstrap"
      data-sap-ui-theme="sap_bluecrystal"        
      data-sap-ui-libs="sap.m"
      data-sap-ui-xx-bindingSyntax="complex"
      data-sap-ui-resourceroots='{"com.App": "./"}'>
    </script>    

  </head>
  <body class='sapUiBody' id="content"></body>
</html>