我创建以下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对象中的键名必须相同吗?还是有一种方法可以通过数组中的不同键以我想要的方式实现?
答案 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
。