2017-06-06 1 views
-1

In meinem app ich Daten aus einer JSON-Datei bin zu lesen und ein Modell aus es wie diese

var myModel = new sap.ui.model.JSONMOdel("pathToJson"); 

Ich habe 300 Werte zu schaffen, aber ich mag nur 50 lesen, ist es eine Möglichkeit, das zu tun. Ich weiß, dass ich $ top und $ skip verwenden kann, um eine bestimmte Menge von Werten mit OData auszuwählen. Die API stellt die Funktion myModel.loadData() zur Verfügung, die einen Parameter oParameters enthält, aber ich weiß nicht, was ich weitergeben kann. Weiß jemand, ob das möglich ist?

Antwort

1

Das JSON-Modell ist ein Client-seitiges Modell. Dies bedeutet, dass alle Daten gleichzeitig mit einer einzigen Anfrage geladen werden. In der Standardimplementierung gibt es keine Methoden zum Lesen ausgelagerter JSON-Inhalte (mit top/skip oder einem anderen Namen, den Sie ihnen geben könnten).

Sie haben gesagt, dass Sie eine JSON-Datei haben, die Sie laden. Ein solches Paging macht also aus technischer Sicht keinen Sinn. Dies liegt daran, dass Sie einen Teil einer statischen Datei nicht (einfach) mit Client-Code laden können (insbesondere JSON, der nicht gültig ist, wenn Sie ein Fragment davon lesen).

Wenn Sie nur ein Segment der Datei im Modell speichern möchten, können Sie einfach die gesamte Datei mit jQuery.ajax und dann slice das Array lesen.

Wenn Sie tatsächlich einen RESTful-Webdienst haben, sollte der Paging-Mechanismus Teil dieses Dienstes sein (z. B. sollte er einige Pfad- oder Abfrageparameter zum Angeben der Paging-Parameter haben). Dieser Dienst sollte für jeden Aufruf ein gültiges JSON-Dokument zurückgeben. Auf der Clientseite können Sie einen solchen Dienst mit Hilfe einiger Funktionen (zB in der Steuerung) verwenden:

onInit: function() { 
    this.setModel(new JSONModel([])); // initially an emty array 
}, 

//call this method when you want to read a page 
onReadDataPage: function (iTop, iSkip) { 
    // use jQuery.ajax or jQuery.get to read a "page" of data; e.g. 
    jQuery.ajax({ 
     url: "your service path", 
     data: { 
      top: iTop, 
      skip: iSkip || 0 
     }, 
     success: this.onDataReceived.bind(this) 
    }); 
}, 

onDataReceived: function (aData) { 
    var oModel = this.getModel(); 
    oModel.setData(oModel.getData().concat(aData); 
} 

Wenn Sie dies in Kombination mit einer Liste mit der wachsenden Funktion nutzen möchten, dann werden Sie müssen eine neue Art von Modell erstellen - was nicht trivial ist.

+0

Danke für die Antwort @Serban Petrescu Ich habe am Ende erstellt mehrere JSON-Dateien und rufen sie separat, um dies zu simulieren. – polaris