我需要在我的 Ui5 应用程序中使用 Tree 控件。我在这里使用 json 模型绑定。我确实有一个包含独特的 roleids 和 odata 结果的数组,我需要使用它构建一个树结构,将其设置为我的 JSON 模型并将其绑定到 UI 控件。
第一个数组如下所示:
[0:“属性”
1:“角色”
2:“角色集合”]
长度:3
[[原型]:数组(0)
Odata.结果如下图:
0> roleid:“属性”值:“测试属性”修改者:“匿名”项目ID:“Test789”
1> 角色ID:“属性”值:“测试属性2”修改者:“匿名”项目ID:“Test789”
2> roleid:“角色”值:“测试角色”修改者:“匿名”projectid:“Test789”
3> roleid:“角色”值:“测试角色”修改者:“匿名”projectid:“Test789”
4> roleid:“RoleCollection”值:“Test RC1”修改者:“anonymous”projectid:“Test789”
5> roleid:“roleCollection”值:“Test RC2”修改者:“anonymous”projectid:“Test789”
6> roleid:“roleCollection”值:“Test RC3”修改者:“anonymous”projectid:“Test789”
使用这些我必须构建树结构 roleid 作为我的父元素,值是子元素,将其绑定到树控件:
<Tree id="Tree" items="{path: 'rModel>/'}" toggleOpenState="onPressTree">
<StandardTreeItem id="_IDTreeItem1" title="{rModel>roleid}" detailPress=""/>
</Tree>
如何构建树形结构?
我尝试了下面的代码,但是它没有在屏幕上显示数据:
const aUnique = [...new Set(oData.results.map(item => item.roleid))];
console.log("array Unique"+ aUnique);
var b = oData.results,
mainArry = [],
obj = {};
for ( var i = 0; i < aUnique.length; i++ ) {
mainArry.push(aUnique[i]);
var temparry = [];
for ( var e = 0; e < b.length; e++ ) {
if (aUnique [i] === b[e].roleid ){
temparry.push(b[e].value);
}
}
mainArry.push(temparry);
temparry ="";
obj.roleid = mainArry;
}
我的问题已解决。我已解决此问题,如下所示:
var dataSet = oData.results;
const mainNode = [];
const aUnique = [...new Set(oData.results.map(item =>
item.roleid))];
aUnique.forEach(e => {
var nodeObj = {};
nodeObj.text = e;
nodeObj.node = dataSet.filter(d => { return d.roleid == e; });
nodeObj.node.forEach( n => {
n.text = n.value;
});
mainNode.push(nodeObj);
});
console.log(mainNode);
that.rdModel.setData(mainNode); //rmodel is a json model here...
that.getView().setModel(that.rdModel, "rdModel");
视图绑定 -->
<Tree id="Tree" items="{path: 'rdModel>/'}" >
<StandardTreeItem id="_IDGenStandardTreeItem1" title="
{rdModel>text}" detailPress=""/>
</Tree>