SAPUI5/FIORI - 智能表按项目事件未触发



我正在尝试在SAP UI5中附加SmartTable控件的itemPress事件。视图在 XML 中定义并绑定到 OData。

<mvc:View
controllerName="myapp.controller.App"
...>
<App>
<pages>
<Page title="title">
<content>
<smartTable:SmartTable
id="kubas"
...
tableType="ResponsiveTable" 
...>
</smartTable:SmartTable>
</content>
</Page>
</pages>
</App>
</mvc:View>

由于对于响应表,后面的表是sap.m.Table,我试图在控制器的onAfterRendering事件中附加itemPress事件。它没有用。然后我尝试覆盖表本身的 onAfterRendering 并在那里附加事件 - 同样的效果,事件没有触发。

onAfterRendering : function(){
var tTable = this.byId("kubas");
var oTable = this.byId("kubas").getTable(); //sap.m.table
console.log(oTable.getMetadata().getName());
oTable.setMode(sap.m.ListMode.SingleSelectMaster);
oTable.onAfterRendering = function(){
console.log("OnAfterRendering");
this.attachItemPress(function(oEvent){
console.log("Pressed!!");
});
}

我在这里做错了什么,有什么建议吗?有没有办法在 XML 中注册它 智能表?我不想在XML视图中切换到sap.m.table,而是保持原样。感谢您的帮助,大师。

那是因为这些项目是">非活动"的。在此处查看文档

>attachItemPress(oData?, fnFunction, oListener?(: sap.m.ListBase 将事件处理程序 fnFunction 附加到此 sap.m.ListBase 的 itemPress 事件。 调用时,事件处理程序(其 this(的上下文将绑定到 oListener(如果指定(,否则它将绑定到此 sap.m.ListBase 本身。

>按下项目时触发,除非项目的 type 属性为"非活动"。

请使用下面的代码,SmartTableattachDataReceived正常工作。

var fnItemPress = function(){alert("press")};   
tTable.attachDataReceived(function(){
var aItems = oTable.getItems();
if(aItems.length === 0 ) return;
$.each(aItems, function(oIndex, oItem) {
oItem.detachPress(fnItemPress);
oItem.setType("Active");
oItem.attachPress(fnItemPress);
});
});

谢谢!

我认为如果没有 XML 中的表定义,就没有机会做到这一点。但我想您可以省略"列"聚合定义,并且在"项目"中仅包含具有所需事件处理程序的"ColumnListItem"(没有"单元格"(。智能表格应自动注入需要的列/单元格。

最新更新