2017-08-02 2 views
1

Ich versuche, das ItemPress-Ereignis für SmartTable-Steuerelement in SAP UI5 anzuhängen. Die Sicht ist in XML definiert und an OData gebunden.SAPUI5/FIORI - SmartTable pressItem Ereignis nicht ausgelöst

<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> 

Da für die ResponsiveTable der Tabelle hinter ist sap.m.Table ich versuchte, das itemPress Ereignis in der onAfterRendering Fall Controller zu befestigen. Es hat nicht funktioniert. Dann habe ich versucht, die OnAfterRendering der Tabelle selbst zu überschreiben und dort das Ereignis anhängen - der gleiche Effekt, das Ereignis wurde nicht ausgelöst.

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

      } 

Muss ich etwas tun, ist hier falsch, irgendwelche Vorschläge? Gibt es eine Möglichkeit, es für SmartTable in XML zu registrieren? Ich möchte nicht zu sap.m.table in der XML-Ansicht wechseln, aber lasse es wie es ist. Würde deine Hilfe Gurus schätzen.

Antwort

0

das ist, weil die Artikel "inaktiv" sind. Prüfen Dokument here

> attachItemPress (OData ?, fnFunction, oListener?): Sap.m.ListBase Ereignishandler fnFunction zum itemPress Ereignis dieser sap.m.ListBase beimißt. Beim Aufruf wird der Kontext des Event-Handlers (dessen dies) an oListener gebunden, falls angegeben, andernfalls wird er an diese sap.m.ListBase selbst gebunden.

> ausgelöst, wenn ein Element gedrückt wird, es sei denn, die Eigenschaft type des Elements Inaktive ist.

Bitte benutzen Sie den Code unten und attachDataReceived von SmartTable arbeitet.

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

Vielen Dank!

+0

Was ist mit dem Trennen dieses Ereignisses? Otherwice gibt es so viele angehängte Ereignisse wie die" updateFinished "Ereignisse ausgelöst werden die Tabelle, die zu mehreren Ereignisauslösungen führen wird :) –

+0

@AndrriNaumovych Ich denke, du hast Recht, ich habe meinen Code geändert Wenn es funktioniert, wird sogar der Tisch aufgefrischt. – Allen

+0

Dies funktioniert als ein Charme, danke Jungs! – Kubas

0

Ich denke, dass keine Chance, das ohne die Tabellendefinition in XML zu tun. Aber ich denke, Sie können "Spalten" Aggregation Definition weglassen und in "Elemente" nur "ColumnListItem" mit dem benötigten Event-Handler (ohne "Zellen") enthalten. Smart Table sollte automatisch benötigte Spalten/Zellen injizieren.

+0

Ich habe versucht, die

(...) aber nicht geholfen. – Kubas

+0

Was hast du genau versucht? –

+0

Ich lege zwischen Smarttable-Tags;

Kubas