我正在尝试使用TreeTable构建SAPUI5应用程序,并且我在使用其方法时遇到了一些问题。
在我的应用中,我有一个触发此方法的按钮。
onChangeViewContext: function(oEvent) {
.........
.........
var aViewContext = oContext.oModel.getProperty(sPath + "/ViewContext");
var aDataModel = oContext.oModel.getProperty("/ApplicationCollection/" + sAppId + "/DataModel");
var oStructure = this._createParentChildStructure(aDataModel);
var oTreeModel = this.getView().getModel("treeModel");
oTreeModel.setData(oStructure);
this._oViewDetailLine = oSource.getParent().getParent().getParent();
this._oViewDetailLine.setVisible(false);
this.byId("idSelectElementsPanel").setVisible(true);
this._setSelectedItems(aViewContext, oTree);
}
我在这里要做的只是用我的treeModel绑定行,获取树表对象并将其发送到我下面的_setSelectedItems方法。
_setSelectedItems: function(aViewContext, oTree) {
oTree.clearSelection();
var sElementName;
var aSelectedIndices = [];
var aElements = [];
var aRows = oTree.getRows();
aRows.forEach(function(row) {
if (row._oNodeState !== undefined) {
aElements.push(row.getCells()[0].getText());
}
});
我需要在这里获取行数组,因为我将使用它来设置树表的选定项目。问题是当“onChangeViewContext”被触发时,oTable.getRows()返回一个空数组。但是当我单击取消按钮(只隐藏我的树表,仅此而已)然后再次触发“onChangeViewContext”函数时,我可以完全获得行数组。
即使在我尝试获取表模型的第一次调用时,我也可以正确获取treeModel及其数据。
我试图刷新绑定,聚合等。但没有运气。
顺便说一下,我在我的xml视图中使用行绑定,如下所示:
<t:TreeTable id="idSelectElementsTree" rows="{path: 'treeModel>/'}" selectionMode="MultiToggle" enableSelectAll="false"
rowSelectionChange="onSelectElement">
我真的在这里溺水,所以任何帮助都会受到赞赏。
编辑:setSelectedIndexes函数的其余部分:
aViewContext.forEach(function(name) {
sElementName = name;
if (aElements.indexOf(sElementName) !== -1) {
aSelectedIndices.push(aElements.indexOf(sElementName));
}
});
aSelectedIndices.forEach(function(idx) {
if (oTree.getRows()[idx]._bHasChildren) {
oTree.expand(idx);
}
oTree.addSelectionInterval(idx, idx);
});