J'essaie actuellement d'étendre un champ sap.m.Input
pour pouvoir mettre en forme et étendre le placement d'étiquettes. Le rendu fonctionne correctement, mais la liaison de données est perdue dans le processus et je ne sais pas pourquoi. Ceci est mon contrôle:Contrôle personnalisé - la liaison de données ne fonctionne pas
sap.ui.define([
'sap/m/Input',
], function(Input) {
'use strict';
return Input.extend('one.sj.control.BhTextInput', {
metadata: {
properties: {
label: {
type: 'string',
},
},
aggregations: {
icon: {
type: 'sap.ui.core.Icon',
multiple: false,
visibility: 'public',
},
},
},
renderer: function(oRM, oControl) {
oRM.write('<div class="formControl">');
oRM.write('<input placeholder="'+oControl.getPlaceholder()+'"');
oRM.write('type="'+oControl.getType()+'"');
oRM.write('value="'+oControl.getValue()+'"');
oRM.writeClasses();
oRM.writeControlData(oControl);
oRM.write('/>');
oRM.write('<label class="inputLabel" for="'+oControl.getId()+'"');
oRM.write('>');
oRM.renderControl(oControl.getIcon());
oRM.write('<span class="inputLabelContent">');
oRM.write(oControl.getLabel());
oRM.write('</span>');
oRM.write('</label>');
oRM.write('</div>');
},
});
});
Comme vous pouvez le voir, c'est assez simple. Voici comment je l'utilise:
<sj:BhTextInput
id="username" class="input textInput"
placeholder="{i18n>HINT_USERNAME}" value="{creds>/username}"
type="Text">
<sj:icon>
<core:Icon src="sap-icon://email" class="inputIcon" />
</sj:icon>
</sj:BhTextInput>
Je confirme ce n'est pas un problème de mon modèle, car il fonctionne très bien quand je remplace la construction <input/>
manuel dans la méthode renderer
ci-dessus:
sap.m.InputRenderer.render(oRM, oControl);
Pouvez-vous repérer quelque chose de mal? Merci!
EDIT: Pour clarifier un peu ce que je veux dire par "perte de liaison de données". Je reçois seulement une chaîne vide quand j'accède à la valeur liée au champ d'entrée dans mon contrôleur comme ceci: getModel('creds').getProperty('/username');
. Cela fonctionne lorsque vous remplacez la construction manuelle comme indiqué ci-dessus.
Merci. Je ne savais pas à propos de writeAttribute. Malheureusement, cela ne change rien. Ma solution actuelle consiste simplement à utiliser InputRenderer. Je crois que parce que l'entrée n'est pas réellement rendu que l'onAfterRendering de l'entrée n'est pas appelée ce qui pourrait être une partie de la liaison se produit. – puelo
Peut-être que vous pourriez partager vos tags HTML générés? – amiramw