SAPUI5: Récupérer l'objet du modèle de contrôleur
J'ai un maître-détail application qui utilise un service OData (déclarée dans le manifeste.json).
Dans le détail de la manette, je lier le modèle à l'affichage de la façon suivante (cette méthode est attaché à un objet routeur).
_onObjectMatched: function(oEvent) {
this.getView().bindElement({
path: "/ContractCompSet('" + oEvent.getParameter("arguments").id + "')",
model: "contracts"
});
}
Comment puis-je accéder au réel lié modèle de l'objet à l'intérieur de ce contrôleur?
Plus proche que je suis (mais semble aussi être un peu trop compliqué) est comme suit
var path = this.getView().getElementBinding('contracts').sPath.substring(1);
var model = this.getView().getModel('contracts').oData[path];
Bonjour Marc, il a été un certain temps depuis que vous avez posté, mais j'ai la même question: je voudrais avoir accès aux données unique dans le Détail Contrôleur et jusqu'à présent je ne peux que l'utilisation des données dans la vue elle-même. Avez-vous résoudre problème ci-dessus?
Oui, vous pouvez accéder à toutes les données de votre point de vue dans votre contrôleur. J'ai l'habitude de faire
Oui, vous pouvez accéder à toutes les données de votre point de vue dans votre contrôleur. J'ai l'habitude de faire
this.getView().getBindingContext("NAME_OF_MODEL")
. Cela me donne le contexte qui est lié à la vue. Vous pouvez ensuite faire .getObject()
pour accéder à des données réelles. Donnez-moi un exemple de code et je peux essayer de l'aider.OriginalL'auteur Marc | 2015-08-20
Vous devez vous connecter pour publier un commentaire.
Bien votre approche n'est pas de loin, et est en effet à peu près la même que hirses.
Le point est la liaison ne contient pas le "juste" la limite de l'objet du modèle. Il contient les informations sur le modèle, le chemin d'accès à l'objet lié et le contexte. Ceux-ci peuvent être récupérées à partir de la liaison. Pour accéder à l'objet lié" ensuite, vous avez essentiellement deux chemins d'accès disponibles.
Obtenir le modèle et le chemin d'accès à partir de la liaison et de l'accès à l'objet lié par l'intermédiaire du modèle: (c'est ce que vous et hirse décrites)
Ou obtenir du contexte et de pat et d'accéder à l'objet lié" de cette façon:
Sans avoir fait beaucoup de recherches sur ce, je préfère la deuxième option. Il semble juste plus le long de la ligne de la façon dont le contexte de liaison est prévu.
bindElement()
,oContext
estundefined
. Est-il une sorte d'ÉvénementonBindingReady
? (Ma solution actuelle ne fonctionnera pas non plus si j'essaye d'accéder au modèle juste après la liaison)De ne pas assurer sur ce depuis que j'ai jamais eu ce problème. Mais si vous utilisez un serveur de côté le modèle et l'objet n'a pas encore été chargé d'une demande est envoyée pour le récupérer. Depuis ce pourrait être une requête asynchrone, il pourrait prendre un temps complet. Cela pourrait être la raison pour laquelle les données ne sont pas disponibles immédiatement. Vous pouvez avoir un coup d'oeil à l'activité du réseau. Le dataReceived' événement de cette sève.l'interface utilisateur.de modèle.La liaison peut aussi être un bon point de départ pour examiner pour un événement à crochet pour. sapui5.netweaver.ondemand.com/sdk/docs/api/symbols/...
J'ai peut-être trouvé quelque chose d'un peu mieux: Lors de l'appel
bindElement
- je ajouter une fonction pour l'événement de changement (events: { change: function() { } }
où je peux accéder au modèle viathis.getModel().getProperty(this.getPath())
. Mais tbh je ne suis pas vraiment sûr de ce que exactementthis
est 😀 Merci pour votre aide en tout cas."il" est l'appel de la source de l'événement.
La liaison de modèle est asynchrone, lorsque vous essayez de récupérer la
oContext
vous obtenezundefined
car il peut ne pas être encore disponible en ce moment. Par exemple, si vous liez quelque chose à la vue, comme ceci:this.getView().bindElement(sEntityPath);
alors pour une bonne récupération de votre nouveau contexte, vous devriez essayer d'obtenir un rappel à la ModelContextChanged événementthis.getView().attachModelContextChange(function(){ /* your operations */});
OriginalL'auteur Carsten
J'aurais pensé,
vous donne le Modèle d'Objet (comme dans un objet de type
sap.ui.model.Model
ou sous-classe).Si vous faites référence à des données dans le Modèle, vous pouvez utiliser les éléments suivants:
this.getView().getModel('contracts').oData
, un objet qui contient toutes extraites modelobject (ContractCompSet('1'), ContractCompSet('2')
etc). J'aurais préféré le seul objet qui est lié à la vue.Cela fonctionne si vous souhaitez obtenir de l'ensemble du modèle. Merci
OriginalL'auteur hirse