1

我正在尝试在 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>

由于对于 ResponsiveTable 后面的表是 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 中为 SmartTable 注册它?我不想在 XML 视图中切换到 sap.m.table,而是保持原样。感谢您的帮助大师。

4

2 回答 2

1

那是因为这些项目是“非活动的”。在此处检查文档

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

> 当一个项目被按下时触发,除非项目的 type 属性是Inactive

请使用下面的代码并且attachDataReceived正在SmartTable工作。

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);
    });
});

谢谢!

于 2017-08-04T07:51:01.940 回答
0

我认为如果没有 XML 中的表定义,就没有机会这样做。但我想你可以省略“列”聚合定义,并且在“项目”中只包含“ColumnListItem”和所需的事件处理程序(没有“单元格”)。智能表应该自动注入需要的列/单元格。

于 2017-08-02T15:06:16.357 回答