Ho un modulo OpenUI5 costituito da un numero di controlli di input. Questi controlli di input sono associati a un modello utilizzando OpenUI5 DataBinding come descritto in the documentation. Per esempio:Come attivare la convalida DataBinding per tutti i controlli?
new sap.m.Input({
value: {
path: "/Position/Bezeichnung",
type: new sap.ui.model.type.String(null, {
minLength: 1,
maxLength: 128
})
}
})
Come nell'esempio sopra Sto utilizzando vincoli sulla StringLength. Quando un utente modifica il valore dell'ingresso, viene attivata la convalida e in base a Validationresult viene richiamata una delle funzioni descripted here. In queste funzioni sto impostando la ValueState del controllo in questo modo:
setupValidation: function() {
var oCore = sap.ui.getCore();
oCore.attachValidationError(function (oEvent) {
oEvent.getParameter("element").setValueState(sap.ui.core.ValueState.Error);
});
oCore.attachValidationSuccess(function (oEvent) {
oEvent.getParameter("element").setValueState(sap.ui.core.ValueState.None);
});
oCore.attachFormatError(function (oEvent) {
oEvent.getParameter("element").setValueState(sap.ui.core.ValueState.Error);
});
oCore.attachParseError(function (oEvent) {
oEvent.getParameter("element").setValueState(sap.ui.core.ValueState.Error);
});
},
Assumiamo la variabile legata modello è iniziale. Sto caricando la vista, il valore della proprietà viene analizzato e visualizzato come vuoto. Il metodo Validationerror/Parseerror è non chiamato sebbene i vincoli non siano soddisfatti. Questo sembra essere il comportamento standard di OpenUI5. Solo le modifiche nel Controllo saranno convalidate.
Ora supponiamo di avere un pulsante di invio e il valore di Inputcontrol è ancora vuoto. Quando l'utente preme il pulsante di invio, desidero attivare la convalida DataBinding per tutti i controlli figlio della mia vista. Ciò confermerebbe l'input sopra menzionato e comporterebbe uno stato di errore.
La mia domanda è: come posso attivare la convalida del databinding per tutti i controlli figlio della mia vista?
C'è un'altra domanda su SO dove il poster richiede un modo per definire i campi obbligatori. La soluzione proposta è chiamare getValue() sul controllo e convalidare il valore manualmente. Penso che questo sia un po 'macchinoso come la formulazione e le informazioni sui vincoli e la logica è già presente.
Hai trovato una soluzione per questo problema? – toxvaerd
Per essere onesti: No. In questo momento sto convalidando tutti i controlli uno per uno. In realtà questa sembra essere una buona scelta perché posso fornire singoli messaggi di stato. – Kai