Obtenir les données liées à l'objet de pressée ligne de table - getBindingContext() renvoie undefeind
Dans SAP UI5, j'essaie d'obtenir l'objet de données (dans mon contrôleur) qui est lié à une ligne de la table lorsque l'utilisateur appuie sur elle. De mon point de vue est défini en XML, et mon contrôleur est en JS, bien sûr.
J'ai vérifié Comment obtenir du contenu d'une ligne dans sap.m.table déjà, mais il ne fonctionne pas pour moi, ou il manque quelque chose.
Mon point de vue (d'une partie):
<Panel>
<Table id="lineItemList" items="{
path: 'statusJobs>/jobs',
sorter: {
path: 'start',
descending: true
}
}">
<headerToolbar>
<!-- ... -->
</headerToolbar>
<columns>
<Column hAlign="Left" vAlign="Middle">
<Label text="Job" />
</Column>
<Column hAlign="Center" vAlign="Middle">
<Label text="Start" />
</Column>
<Column hAlign="Center" vAlign="Middle">
<Label text="End" />
</Column>
<Column hAlign="Right" vAlign="Middle">
<Label text="Success" />
</Column>
</columns>
<ColumnListItem
type="Navigation"
press=".handleLineItemPress"
>
<Text text="{statusJobs>job}" />
<Text text="{
path: 'statusJobs>start',
formatter:'util.Formatter.Date'}"
/>
<Text text="{
path: 'statusJobs>end',
formatter: 'util.Formatter.Date'}"
/>
<Text text="{statusJobs>status}"/>
</ColumnListItem>
</Table>
La partie pertinente ici est évidemment:
<ColumnListItem
type="Navigation"
press=".handleLineItemPress"
>
Et dans mon contrôleur, j'ai ceci:
handleLineItemPress: function(evt) {
console.log('evt.getSource: ' + evt.getSource());
console.log('evt.getBindingContext: ' + evt.getSource().getBindingContext());
}
qui des journaux comme suit:
evt.getSource: Élément de sap.m.ColumnListItem#__item11-StatusJobs--lineItemList-0
evt.getBindingContext: undefined
evt.getSource
renvoie la ColumnListItem, alors, évidemment, à partir de là, je pouvais utiliser la hiérarchie de l'objet et de récupérer le texte d'une cellule, comme:
evt.getSource().getCells()[0].getText();
Mais cela ne semble pas être la bonne façon et surtout ne pas donner l'ensemble de l'objet ou son ID unique, qui m'arrive de ne pas afficher dans le tableau.
Je suis en quelque sorte manqué la connexion à mon modèle de données, que j'avais tenu plus haut dans le code, dans le <Table>
élément, comme suit:
items="{
path: 'statusJobs>/jobs',
sorter: {
path: 'start',
descending: true
}
}"
OriginalL'auteur Mathias Conradt | 2014-07-22
Vous devez vous connecter pour publier un commentaire.
Je déteste dire ça, mais j'ai eu le même problème, et il m'a fallu un certain temps pour trouver la cause...
Toutes sont liées à l'utilisation de l'nommé modèles, dans votre cas
statusJobs
.Si vous souhaitez récupérer le contexte de liaison pour les articles lié à un attribut nommé, pour une raison quelconque (honnêtement, je ne peux pas penser à tout), vous devez aussi spécifier le nom du modèle:
sera de retour le bon contexte de liaison.
Ainsi, pour récupérer l'objet réel lié à la touche de ligne de l'élément, vous pouvez utiliser:
Depuis un contexte ne peut pas être lié à plus d'un modèle (à ma connaissance), je ne comprends vraiment pas pourquoi vous avez besoin spécifiquement de donner le nom du modèle nom en tant que paramètre, mais pour l'instant je crois que nous devons vivre avec ce problème
OriginalL'auteur Qualiture