Comment Accéder aux Éléments de Fragment XML par ID
Je suis en train de travailler sur un SAPUI5 application. J'ai une vue XML qui contient un fichier XML Fragment et un Bouton pour enregistrer.
Le fragment contient quelques commandes comme déroulante, zone de texte et un tableau.
Quand je presse sur le bouton enregistrer, j'ai besoin d'obtenir toutes les lignes de la table et l'appel d'un OData service de mise à jour.
Le problème est dans la onSave
méthode en vue-contrôleur. J'obtiens une erreur lors de l'accès à la table à l'aide de son ID. Quelqu'un peut m'aider et des conseils comment puis-je accéder aux contrôles utilisés dans les fragments par leur ID dans le contrôleur?
Voici l'extrait de code:
---- Voir
<mvc:View xmlns:mvc="sap.ui.core.mvc" xmlns:core="sap.ui.core" xmlns:form="sap.ui.layout.form" xmlns="sap.m">
<Page>
...
<form:SimpleForm>
<core:Fragment id ="fr1" fragmentName="first" type="XML"/>
<Button id="id1" press="onSave"/>
</form:SimpleForm>
</Page>
</mvc:View>
---- Fragment Définition
<core:FragmentDefinition xmlns="sap.m" xmlns:core="sap.ui.core">
<Table id="tab1" mode="MultiSelect">
...
</Table>
</core:FragmentDefinition>
---- Contrôleur
sap.ui.controller("view", {
onSave: function() {
//var tab = this.getView().byId("tab1"); //Not working
var tab = sap.ui.getCore().byId("tab1"); //Not working
},
//...
});
OriginalL'auteur Nilesh Puranik | 2016-09-23
Vous devez vous connecter pour publier un commentaire.
À la recherche à la openui5 code sur github, il semble que le Fragment délégués locaux de génération d'identifiant de la vue, si la
<Fragment/>
lui-même ne pas explicite id.De sorte que votre code
this.getView().byId("tab1")
devrait fonctionner dès que vous retirez leid="fr1"
attribut de votre<Fragment/>
élément.Lors de l'utilisation explicite des id il y a un statique Fragment.byId() méthode pour récupérer le contrôle. Je suppose que vous avez à l'utiliser comme ceci:
OriginalL'auteur schnoedel
Accéder aux contrôles à l'intérieur d'un fragment dépend de la façon dont votre fragment a été créé en premier lieu. Voici une liste de cas avec l'API à utiliser pour obtenir le contrôle de référence:
API à Utiliser
Lorsque le fragment a été créé avec un identification:
Global ID:
"componentId---viewId--controlId"
**Lorsque le identification et un fragment ID ont été donnés:
Global ID:
"componentId---viewId--fragmentId--controlId"
**Quand fragment ID seulement:
Global ID:
"fragmentId--controlId"
Lorsque aucune Id ont été donnés:
Global ID:
"controlId"
*: L'API
sap.ui.*fragment
est obsolète. UtilisationFragment.charger
à la place (disponible depuis 1.58).**: L'ID de composant ne sera pas une partie de l'IDENTIFIANT global si aucune stable ID a été donné pour la vue. Dans ce cas, l'IDENTIFIANT global commence avec l'généré vue ID:
"__xmlview0--..."
.Donné
this
: Renvoi à l'instance du contrôleurFragment
: Nom du paramètre pour l'résolu module donné par la définition de la dépendanceNote
Éviter la concaténation ID parties ou en s'appuyant sur la syntaxe de l'IDENTIFIANT global, comme mentionné dans le commentaire ainsi que dans le la documentation:
myManuallyAccessedInput.setValue("...")
). Faire usage de la liaison de données au lieu ⇒ Changements dans le modèle sont reflétées dans l'INTERFACE utilisateur automatiquement.OriginalL'auteur Boghyon Hoffmann
Pour le faire fonctionner sans l'accord fragment ID et sans statique Fragment.byId (), j'ai utilisé de l'extrait de code suivant:
après cela, vous pouvez utiliser ce.getView().byId("tab1") comme avec tout autre contrôle.
--
et---
utilisé par le framework peut changer dans le futur. C'est pourquoi il est recommandé d'utiliser l'api publique fonctions le cadre de fournitures commebyId()
etcreateId()
.S'il vous plaît, ne pas bricoler avec le mondial de l'ID. Afficher l'Id de ne pas toujours commencer défini par l'utilisateur ou ID généré, mais souvent avec de la composante de l'ID qui est également le cas lorsque l'application est déployée sur FLP même si il n'y avait pas explicite ID de composant ensemble. C'est encore pire lorsque l'application a un imbriquée à la structure des composants avec
autoPrefixId
activée, faire de l'IDENTIFIANT global très long avec de multiples et un seul des traits d'union entre les deux. Dans de tels cas, l'appel àthis.getView().createId("").replace("--", "")
ne fonctionnent pas comme prévu:"myComponent---myView--".replace("--", "")
==>"myComponent-myView--"
.OriginalL'auteur slkorolev