javascript SAPUI5 TreeTable的getRows方法在第一次调用时返回空数组

qrjkbowd  于 2023-01-16  发布在  Java
关注(0)|答案(1)|浏览(145)

我尝试使用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绑定行,获取树表对象并将其发送到下面的my _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);
        });
5kgi1eie

5kgi1eie1#

在XML视图中向表中添加一个事件rowsUpdated="onRowsUpdated"可能会有所帮助,该事件在表加载后触发,因此将通过以下方式为您提供数据:
this.getView().byId("sTableId").getRows();
您的方法的不同之处在于,该事件不是通过按下按钮触发的,而是在呈现表时自动触发的,然后您还可以根据您的用例使用此函数触发另一个事件。

相关问题