2017-08-17 2 views
-1

je suis arrivé le problème, que si je mets un JSONModel dans mon contrôleur, je ne suis pas en mesure d'obtenir les données hors de celui-ci:openui5 obtenir des données de JSONModel

var oModel = new JSONModel(jQuery.sap.getModulePath("QAQuickAccess", "/routes.json")); 

this.getView().setModel(oModel); 
console.log(oModel.getJSON()); 

La méthode getJSON stringifies juste l'objet oData du modèle. Mais ça me donne juste un objet vide. Si je ne connecte oModel, je peux voir l'objet avec son contenu:

Object content

Répondre

0

Vous pouvez accéder aux propriétés via oModel.getProperty("/TileCollection");

+0

Mes journaux: oModel.getData() = {} oModel.getProperty ("/ TileCollection") = non défini oModel.getJSON() = {} oModel. oData = {} –

+0

Mais dans le même contexte votre journal oModel est rempli avec les données? –

+0

L'objet oData dans oModel est rempli avec le "TileCollection". L'écran de celui-ci est ci-dessus dans la question. Tous les journaux sont exécutés dans la fonction "onInit" du contrôleur. –

0

Il y a 2 façons d'y parvenir:

1) Chemin asynchrone: Par défaut, l'appel HTTP que JSONModel effectue est asynchrone. Donc, si vous voulez accéder aux données après que la requête HTTP est terminée, vous devez utiliser la méthode attachRequestCompleted comme mentionné dans l'extrait de code ci-dessous. Cela appellera automatiquement l'auditeur après la requête HTTP est terminée et l'auditeur, vous pouvez joindre le JSONModel à votre point de vue ou d'effectuer d'autres logiques businsess comme indiqué ci-dessous:

var oModel = new JSONModel(jQuery.sap.getModulePath("QAQuickAccess", "/routes.json")); 
oModel.attachRequestCompleted(null,function() { 
console.log(oModel.getData()); 
this.getView().setModel(oModel) }, 
this); 

2) manière synchrone: Si vous voulez que les données soient chargées immédiatement, vous pouvez utiliser la méthode loadData avec les paramètres ci-dessous. Cela rendra la requête HTTP synchrone:

var oModel = new JSONModel({}); 
var url = jQuery.sap.getModulePath("QAQuickAccess", "/routes.json") 
oModel .loadData(url, "", false); 
this.getView().setModel(oModel); 
console.log(oModel .getData());