sap.m.table does not get updated



我在视图中有一个选项卡,其中包括一个表(在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>

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

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

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

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

最新更新