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

时间:2017-09-15 12:15:59

标签: javascript tree sapui5 treetable

我正在尝试使用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);
        });

0 个答案:

没有答案