sap.m.table没有更新

时间:2018-07-27 18:17:22

标签: odata sapui5

我在视图中有一个选项卡,其中包含一个表(在XML视图中声明),该表应该按一下按钮即可填充。 Button附加一些过滤器并调用model.read()方法,该方法成功返回结果。但是,该表仍然为空。

我知道XML视图绑定是正确的,因为在使用按钮逻辑之前,通过Component.js中的硬编码调用填充了一些数据,并且数据按预期出现。

我也知道数据会返回,在函数末尾进行调试,所有数据都在那里。我甚至尝试在函数末尾将bForceUpdate参数设置为“ true”时刷新模型,但是也没有运气。有疑问的代码和XML视图的表部分在下面。

控制器功能代码-仅上面的过滤器操作

if ( sYearFmParam === "" || sYearToParam === "" ) {
    MessageBox.error(
        this.getModel("i18n").getResourceBundle().getText("fiscalYearEmptyErrorMesage"),
        {
            actions: [MessageBox.Action.CLOSE]
        }
    );                  
} else if ( sYearFmKey <= sYearToKey ) {
    if (sYearDiff < 15) {
        this.oReportModel.read(sPath, { filters: oTableSearchState,
            success: function(oData, oResponse) {
                oStsReportDataDeferred.resolve();
            },
            error: function(oError) {
                jQuery.sap.log.error("Error", oError);
            }
        });                     
    } else {
        MessageBox.error(
            this.getModel("i18n").getResourceBundle().getText("fiscalYearDiffErrorMesage"),
            {
                actions: [MessageBox.Action.CLOSE]
            }
        );                      
    }
} else {
    MessageBox.error(
        this.getModel("i18n").getResourceBundle().getText("fiscalYearErrorMesage"),
        {
            actions: [MessageBox.Action.CLOSE]
        }
    );                  
}
var readyToGo = function() {
    this.oReportModel.refresh(true);
    this.getModel("Global").setProperty("/statusTableVisible", true); 
    jQuery.sap.log.debug("report refreshed");
};

jQuery.when(oStsReportDataDeferred).done().then( jQuery.proxy(readyToGo, this) );

XML视图-仅表部分

<Table id="statusReportTable"
    items="{
        path: 'Report>/Status_Report_DataSet',
        sorter: { path: 'ReportBy' }
    }"                          
    width="auto"
    class="sapUiResponsiveMargin"
    noDataText="{worklistView>/tableNoDataText}"
    busyIndicatorDelay="{worklistView>/tableBusyDelay}"
    growing="true"
    growingScrollToLoad="true"
    visible="{Global>/statusTableVisible}">

    <headerToolbar>
        <Toolbar>
            <Title id="statusReportToolbar" text="{worklistView>/summaryTableTitle}"/>
            <ToolbarSpacer />
        </Toolbar>
    </headerToolbar>
    <columns>
        <Column></Column>
        <Column></Column>
        <Column></Column>
        <Column></Column>
        <Column></Column>
        <Column></Column>
        <Column></Column>
        <Column></Column>
        <Column></Column>
        <Column></Column>
        <Column></Column>
        <Column></Column>
        <Column></Column>
        <Column></Column>
        <Column></Column>
    </columns>


    <items>
        <ColumnListItem>
            <cells>
                <Text text="{Report>ReportBy}" width="100px"/>  
                <Text text="{path: 'Report>StsStarted1'}" width="40px"
                   visible="{path: 'Report>StsStarted1v', formatter: '.formatter.setStatusColumnVisibility'}"/> 
                <Text text="{path: 'Report>Sts0041'}" width="40px"
                   visible="{path: 'Report>Sts0041v', formatter: '.formatter.setStatusColumnVisibility'}"/> 
                <Text text="{path: 'Report>Sts0021'}" width="40px"
                   visible="{path: 'Report>Sts0021v', formatter: '.formatter.setStatusColumnVisibility'}"/> 
                <Text text="{path: 'Report>Sts0031'}" width="40px"
                   visible="{path: 'Report>Sts0031v', formatter: '.formatter.setStatusColumnVisibility'}"/> 
                <Text text="{path: 'Report>StsAct1'}" width="40px"
                   visible="{path: 'Report>StsAct1v', formatter: '.formatter.setStatusColumnVisibility'}"/> 
                <Text text="{path: 'Report>Sts0011'}" width="40px"
                   visible="{path: 'Report>Sts0011v', formatter: '.formatter.setStatusColumnVisibility'}"/>
                <Text text="{path: 'Report>Sts0061'}" width="40px"
                   visible="{path: 'Report>Sts0061v', formatter: '.formatter.setStatusColumnVisibility'}"/>
                <Text text="{path: 'Report>StsStarted2'}" width="40px"
                   visible="{path: 'Report>StsStarted2v', formatter: '.formatter.setStatusColumnVisibility'}"/>
                <Text text="{path: 'Report>Sts0042'}" width="40px"
                   visible="{path: 'Report>Sts0042v', formatter: '.formatter.setStatusColumnVisibility'}"/>
                <Text text="{path: 'Report>Sts0022'}" width="40px"
                   visible="{path: 'Report>Sts0022v', formatter: '.formatter.setStatusColumnVisibility'}"/>
                <Text text="{path: 'Report>Sts0032'}" width="40px"
                   visible="{path: 'Report>Sts0032v', formatter: '.formatter.setStatusColumnVisibility'}"/>
                <Text text="{path: 'Report>StsAct2'}" width="40px"
                   visible="{path: 'Report>StsAct2v', formatter: '.formatter.setStatusColumnVisibility'}"/>
                <Text text="{path: 'Report>Sts0012'}" width="40px"
                   visible="{path: 'Report>Sts0012v', formatter: '.formatter.setStatusColumnVisibility'}"/>
                <Text text="{path: 'Report>Sts0062'}" width="40px"
                   visible="{path: 'Report>Sts0062v', formatter: '.formatter.setStatusColumnVisibility'}"/>
            </cells>
        </ColumnListItem>
    </items>
</Table>

1 个答案:

答案 0 :(得分:0)

我真的不能说出为什么您的表不显示任何内容,但是我注意到您在过滤方面没有完全正确地使用OData模型。从XML视图查看表项的绑定,我希望该表显示Status_Report_DataSet实体集中的所有实体。如果不是这种情况,那么如果您尝试读取整个实体集,或者手动将绑定挂起在控制器中,则后端OData服务根本不会返回任何实体。

OData模型(以及UI5中的整个模型概念)要求您将过滤器添加到表的绑定中。进行编程的read调用不会影响表的内容。正确的做法是:

this.byId("statusReportTable").getBinding("items").filter(oTableSearchState);

此外,执行模型刷新将只为所有绑定的实体集或单个实体重新触发一个或多个读取请求。