将具有不同键名的自行创建的JSON数组绑定到sap.m.List

时间:2018-12-05 14:58:45

标签: javascript sapui5

我创建以下JSON数组:

> S_TVF_Euler_E_axes_plotly <- with(S_TVF_Euler_E_axes, interp(TVF, 
                                  minEuler, E_avg, duplicate = "mean"))
> plot_ly(x = S_TVF_Euler_E_axes_plotly$x, y = S_TVF_Euler_E_axes_plotly$y, 
        z = S_TVF_Euler_E_axes_plotly$z, type = 'surface')

然后我的对话框中将显示一个列表,如下所示:

var oModel = new sap.ui.model.json.JSONModel({
  ItemSet: [
    { "item1": this.oTextBundle.getText("Flower") },
    { "item2": this.oTextBundle.getText("Tree") }
  ]
});
//then I push that model to my dialog
this._oDialog.setModel(oModel);

最后,唯一绑定的值是来自item2,“树”的i18n转换已加载到我的列表中,“花”没有出现。当我切换到以下代码时:

<List id="idList" width="700px" items="{ path:'/ItemSet'}">
  <CustomListItem>
    <Label id="id1" text="{item1}" width="350px" />
  </CustomListItem>
  <CustomListItem>
    <Label id="id2" text="{item2}" width="350px" />
  </CustomListItem>
</List>
var oModel = new sap.ui.model.json.JSONModel({
  ItemSet: [{
      "item": this.oTextBundle.getText("Flower")
    },
    {
      "item": this.oTextBundle.getText("Tree")
    }
  ]
});
//then I push that model to my dialog
this._oDialog.setModel(oModel);

所以所有JSON对象中的键名必须相同吗?还是有一种方法可以通过数组中的不同键以我想要的方式实现?

2 个答案:

答案 0 :(得分:1)

您没有提供用于列表绑定的模板,而是提供了您想要的两个项目。 Sapui5期望模板是一个且唯一的控件,如果提供多个​​模板,则仅采用最新的模板。 就您而言,您最终得到item2,仅仅是因为模板中的第二个对象引用了item2。

如上所述,将您的视图更改为:

<List id="idList" width="700px" items="{/ItemSet}">
  <CustomListItem>
    <Label text="{item}" width="350px" />
  </CustomListItem>
</List>

它将起作用

edit:List的隐式聚合为'items'。这意味着上面的代码严格等同于

<List id="idList" width="700px" items="{/ItemSet}">
  <items>
    <CustomListItem>
      <Label text="{item}" width="350px" />
    </CustomListItem>
  </items>
</List>

由于绑定了“ items”聚合,因此sapui5会将“ items”标记中的所有内容视为模板

答案 1 :(得分:0)

您可以为 ID 使用一个密钥,而对于 values 使用一个密钥。

/ p>

一个例子:

var oModel = new sap.ui.model.json.JSONModel({
  ItemSet: [
    { "value": this.oTextBundle.getText("Flower"), "id": "1" },
    { "value": this.oTextBundle.getText("Tree"), "id": "2" }
  ]
}); 
this._oDialog.setModel(oModel);

这样,您仍然为每个条目都有一个密钥标识符,并且可以轻松地将模型绑定到sap.m.List

<List mode="SingleSelectMaster" items="{ path:'/ItemSet'}" selectionChange="listPress">
  <CustomListItem>
    <Label text="{value}"/>
  </CustomListItem> 
</List>

您将可以通过以下方法获得所选项目的 ID

listPress: function (oControlEvent) {
   var oCtx = oControlEvent.getSource().getBindingContext();
   var oPressedItem = this.getView().getModel().getProperty(oCtx.getPath());
}

oPressedItem.id将为您提供所选项目的 ID