# Objekt in Array verschachteln, welches man wiederum in ein Objekt packt



## Casio (24. Jun 2016)

Also für das Binding meiner Tabelle, muss ich folgendes JSON Objekt:

```
{"id":"txn_18Ptu52eZvKYlo2C9c8ejhap","amount":999,"availableOn":1467331200,"created":1466773164,"currency":"usd"}
```

in so etwas umwandeln:



```
{"data":[{"id":"txn_18Ptu52eZvKYlo2C9c8ejhap","amount":999,"availableOn":1467331200,"created":1466773164,"currency":"usd"}]}
```

weil ich später meine Spalten mit "/data" binde

Folgendes habe ich versucht:



```
success : function(data1, textStatus, jqXHR) {
                      var resp = [data1];
                      var response = {data: resp[0]};
                      var oJSonModel = new sap.ui.model.json.JSONModel(response);
                      this.oView.setModel(oJSonModel);
```

data1 ist genau das Objekt was ich ganz oben erhalte, ich speicher dieses dann in einem Array mit dem Namen resp, dann versuche ich dieses Array in einem neuen Objekt zu speichern, aber irgendwas geht da anscheinend schief, weil ich dann folgenden Error bekomme

  sap-ui-core.js:71 Uncaught TypeError: Cannot read property 'setModel' of undefined


dementsprechend wird auch nichts in meiner Tabelle angezeigt weil ich vermute, dass ich hier nicht wirklich mein Array gespeichert hab sonst würde er mir ja nun das Array komplett anzeigen.....

EDIT: hab was verändert

Viele Grüße, Casio


----------



## Tobse (24. Jun 2016)

Casio hat gesagt.:


> sap-ui-core.js:71 Uncaught TypeError: Cannot read property 'setModel' of undefined



Das Problem ist nicht die Verschachtelung deines Objekts, sondern diese Zeile:



Casio hat gesagt.:


> ```
> this.oView.setModel(oJSonModel);
> ```


_this.oView_ ist offensichtlich _undefined_. Ich vermute stark, dass du diesen Code wo anders rauskopiert hast, weshalb die this-Referenz nicht mehr stimmt (this innerhalb einer Top-Level Funktion in JS ist eigentlich nie was sinnvolles); demnach ist auch _this.oView_ nicht definiert.Wie du das berichtigen kannst, kann ich dir leider nicht sagen, sap-ui kenne ich nicht.


----------



## Casio (27. Jun 2016)

Tobse hat gesagt.:


> Das Problem ist nicht die Verschachtelung deines Objekts, sondern diese Zeile:
> 
> 
> _this.oView_ ist offensichtlich _undefined_. Ich vermute stark, dass du diesen Code wo anders rauskopiert hast, weshalb die this-Referenz nicht mehr stimmt (this innerhalb einer Top-Level Funktion in JS ist eigentlich nie was sinnvolles); demnach ist auch _this.oView_ nicht definiert.Wie du das berichtigen kannst, kann ich dir leider nicht sagen, sap-ui kenne ich nicht.




richtig ich bin eigentlich in JS kein meister muss jetzt halt wegen der Aufgabe aber damit arbeiten und habe von einem Projekt einiger Kollegen viel kopiert, aber danke schon mal für den Tipp ich schlag mich mal damit rum und poste dann meine Lösung


----------



## Casio (27. Jun 2016)

oView war nirgendswo definiert ich hätte dort das schreiben müssen:


```
that.getView.setModel(oJSonModel);
```

und in der Funktion direkt am Anfang folgendes deklarieren:


```
var that = this;
```


Problem das er es nicht in der Tabelle anzeigt bleibt aber immer noch....


----------



## Tobse (27. Jun 2016)

Ist dir klar, dass es zwischen _this_ und _that_ für deine Belange keinen Unterschied gibt? 
Beide sind nicht die Variable, die dir hier hilft. Diese ominöse oView kann das Diagramm aktualisieren. Und du brauchst eine Referenz darauf; _this _ist immer Kontextabhängig. Und in einer _function _gibts keinen Sinnvollen Kontext: ergo ist _this.oView_ nicht definiert. Und ein _var that = this_ kann diese Referenz auch nicht aus dem Hut zaubern.

Was du tun kannst:
Schau in die Dokumentation von sap-ui (ist es vllt dashier?). Dort steht, wie und aus welchem Kontext heraus du an die Referenz auf das oView kommst.


----------



## Casio (30. Jun 2016)

Lösung des Problems:


```
success : function(data1, textStatus, jqXHR) {
                      var resp = [data1];
                      var response = {data: resp};
                      var oJSonModel = new sap.ui.model.json.JSONModel(response);
                      this.oView.setModel(oJSonModel);
```


----------

