2016-12-20 3 views
-1

in einzelne Modelldefinition Mit manifest.json-Access-Modell in Manifest definiert

"models": { 
    "i18n": { 
     "type": "sap.ui.model.resource.ResourceModel", 
     "settings": { 
      "bundleName": "....i18n.i18n" 
     } 
    }, 
    "": { 
     "dataSource": "mainService" 
    } 
} 

i binden kann von XML zu modellieren und es ist Arbeit

<List items="{path: '/myOneSet'}"> ... </List> 
<List items="{path: '/myTwoSet'}"> ... </List> 

aber ich kann nicht von Code darauf zugreifen

this.getView().getModel().getProperty('/myOneSet') 

oder

this.getView().getModel().getProperty('/myOneSet/>param') 

funktioniert nicht. Wie es zugänglich ist?

+1

Rufen Sie Ihr Modell in onInit an? – matbtt

+0

Wenn Sie versuchen, auf das Modell in 'onInit' zuzugreifen, müssen Sie die Fehlermeldung in der Konsole erhalten, die besagt, dass' getProperty' nicht von 'undefined' aufgerufen werden kann. Ist es das, was du bekommst? Oder was genau ist das Problem? – boghyon

Antwort

0

Wenn Sie das Modell in der Datei manifest.json definiert haben, können Sie über die Komponente auf es zugreifen. Wenn Sie Ihr Projekt über Vorlage erstellt haben, dann haben Sie eine BaseController.js Datei, die der Vorgänger Ihrer anderen Controller ist, und es gibt eine Funktion getComponentModel. Also, ich würde Ihnen vorschlagen, diesen Code in Ihrem Controller, um zu versuchen:

this.getComponentModel().getProperty('/myOneSet') 
0

Aufgrund der Eigenschaftsnamen, die Sie versuchen zuzugreifen Ich gehe davon aus Sie einen ODataModel verwenden. Ist das korrekt?

Wenn das stimmt, müssen Sie ein paar Dinge in Betracht ziehen ... ODataModel.getProperty() löst keine Anfragen aus. Stattdessen wird es zurückgeben, was bereits verfügbar ist. Wenn Sie eine Anfrage auslösen möchten, sollten Sie eine ODataModel.read() ausführen. Wenn Sie die geladenen Daten aus dem ODataModel abrufen möchten, sollten Sie auch wissen, wenn die Daten geladen wurden. Dies erreichen Sie, indem Sie beim Binden einen Change-Event-Handler anhängen.

Anstatt zu beschreiben, wie man auf die Daten eines ODataModel zugreift, schrieb ich s wenig jsbin example für Sie (oder sehen Sie unten). Überprüfen Sie den Change Event Handler. Es gibt mehrere Möglichkeiten, auf die Daten zuzugreifen.

<!DOCTYPE html> 
 
<html> 
 
    <head> 
 
     <meta charset="utf-8"> 
 
     <title>SAPUI5 single file template | nabisoft</title> 
 
     <script src="https://openui5.hana.ondemand.com/resources/sap-ui-core.js" 
 
      id="sap-ui-bootstrap" 
 
      data-sap-ui-theme="sap_bluecrystal" 
 
      data-sap-ui-libs="sap.m" 
 
      data-sap-ui-bindingSyntax="complex" 
 
      data-sap-ui-compatVersion="edge" 
 
      data-sap-ui-preload="async"></script> 
 
      <!-- use "sync" or change the code below if you have issues --> 
 
    
 
     <!-- XMLView --> 
 
     <script id="myXmlView" type="ui5/xmlview"> 
 
      <mvc:View 
 
       controllerName="MyController" 
 
       xmlns="sap.m" 
 
       xmlns:core="sap.ui.core" 
 
       xmlns:mvc="sap.ui.core.mvc"> 
 
    
 
       <Table 
 
        id="myTable" 
 
        growing="true" 
 
        growingThreshold="10" 
 
        growingScrollToLoad="true" 
 
        busyIndicatorDelay="0"> 
 
        <headerToolbar> 
 
         <Toolbar> 
 
          <Title text="Orders of ALFKI"/> 
 
          <ToolbarSpacer/> 
 
         </Toolbar> 
 
        </headerToolbar> 
 
        <columns> 
 
         <Column> 
 
          <Text text="OrderID"/> 
 
         </Column> 
 
         <Column> 
 
          <Text text="Order Date"/> 
 
         </Column> 
 
         <Column> 
 
          <Text text="To Name"/> 
 
         </Column> 
 
         <Column> 
 
          <Text text="Ship City"/> 
 
         </Column> 
 
        </columns> 
 
        <items> 
 
         <!-- filled via bindItems() in controller --> 
 
        </items> 
 
       </Table> 
 
    
 
      </mvc:View> 
 
     </script> 
 
    
 
     <!-- XML Fragment --> 
 
     <script id="myXMLFragment" type="ui5/fragment"> 
 
      <core:FragmentDefinition 
 
       xmlns="sap.m" 
 
       xmlns:core="sap.ui.core"> 
 
       <ColumnListItem type="Active"> 
 
        <cells> 
 
         <ObjectIdentifier title="{OrderID}"/> 
 
    
 
         <Text 
 
          text="{ 
 
           path:'OrderDate', 
 
           type:'sap.ui.model.type.Date', 
 
           formatOptions: { style: 'medium', strictParsing: true} 
 
          }"/> 
 
    
 
         <Text text="{ShipName}"/> 
 
    
 
         <Text text="{ShipCity}"/> 
 
    
 
        </cells> 
 
       </ColumnListItem> 
 
      </core:FragmentDefinition> 
 
     </script> 
 
    
 
     <script> 
 
      sap.ui.getCore().attachInit(function() { 
 
       "use strict"; 
 
    
 
       //### Controller ### 
 
       sap.ui.define([ 
 
        "sap/ui/core/mvc/Controller", 
 
        "sap/ui/model/odata/v2/ODataModel" 
 
       ], function (Controller, ODataModel) { 
 
        "use strict"; 
 
    
 
        return Controller.extend("MyController", { 
 
         onInit : function() { 
 
          this.getView().setModel(
 
           new ODataModel("https://cors-anywhere.herokuapp.com/services.odata.org/V2/Northwind/Northwind.svc/", { 
 
            json : true, 
 
            useBatch : false 
 
           }) 
 
          ); 
 
    
 
          var sPath = "/Customers('ALFKI')/Orders"; 
 
          var oTable = this.byId("myTable"); 
 
          var oTemplate = sap.ui.xmlfragment({ 
 
           fragmentContent : jQuery("#myXMLFragment").html() 
 
          });        
 
          
 
          oTable.bindItems({ 
 
           path : sPath, 
 
           template : oTemplate, 
 
           templateShareable : false, 
 
           sorter : null, 
 
           filters : null, 
 
           events : { 
 
           change : function (oEvent) { 
 
            var oModel, oListBnd, aContexts, i, oObj; 
 
            
 
            console.log("1. Example: ODataModel.getProperty() does not trigger a request (but here we have the data already)!"); 
 
            oModel = this.getView().getModel(); 
 
            console.dir(oModel.getProperty("/Orders(10643)")); //OK 
 
            console.dir(oModel.getProperty("/Orders"));  //Not OK 
 
            console.dir(oModel.getData("/"));    //DANGER: Could contain different entities!!!!! 
 
            
 
            console.log("2. Example: Accessing the Data via ListBinding"); 
 
            oListBnd = oTable.getBinding("items");  // get the ListBinding 
 
            //oListBnd = oEvent.getSource();    // this works here inside the change handler 
 
            aContexts = oListBnd.getCurrentContexts(); // the the contexts 
 
            for(i=0; i<aContexts.length; i++){ 
 
            oObj = aContexts[i].getObject(); // access the items/objects 
 
            console.dir(oObj); 
 
            }         
 
            
 
           }.bind(this) 
 
           } 
 
          }); 
 
          
 
         } 
 
        }); 
 
       }); 
 
    
 
       //### THE APP: place the XMLView somewhere into DOM ### 
 
       sap.ui.xmlview({ 
 
        viewContent : jQuery("#myXmlView").html() 
 
       }).placeAt("content"); 
 
    
 
      }); 
 
     </script> 
 
    
 
    </head> 
 
    
 
    <body class="sapUiBody"> 
 
     <div id="content"></div> 
 
    </body> 
 
</html>

-1

Hallo erklärt Nur dieses manifest

"models": { 
 
\t "createMod": { 
 
\t \t \t \t "preload": true, 
 
\t \t \t \t "dataSource": "CreateService", 
 
\t \t \t \t "settings": { 
 
\t \t \t \t } 
 
}
ist

und Versuche von Controller Access.
var oModelCheck = that.getOwnerComponent(). GetModel ("createMod");

1

Wenn mainService ein OData-Service ist, dann ist Ihr Modell ein ODataModel. Sie können über Methoden Zugriff auf Daten in den API beschrieben, z.B .: read()

this.getView().getModel().read('/myOneSet', { 
    success: function(oData, response) { 
     // do sg. with oData 
    } 
}); 

Die meisten seine Datenzugriffsmethoden haben ein zweites Parameter-Objekt mit einer Erfolgscallback-Funktion. Diese Funktion wird nach erfolgreichem Datenabruf von der Datenquelle asynchron mit den Daten auf dem angegebenen Pfad aufgerufen. Die meisten ODataModel-API-Methoden funktionieren mit Rückrufen. Sie können mehr über Rückrufe here lesen.

Verwandte Themen