Les Opérateurs booléens et ClientHandler

Est-il possible d'utiliser clienthandlers pour déterminer si les 2 zones de texte sont soit tous les deux vides ou contiennent tous les deux une valeur, mais pas l'un ou l'autre?

Pour le moment je suis en utilisant un serverhandler pour tester cette condition, mais pour la vitesse, je préfère utiliser clienthandlers.

if ((textbox1 == '' && textbox2 == '') || (textbox1 != '' && textbox2 != ''))
  //do something
else
  //display error 'both boxes must either be empty or contain a value

Cheers
Dave

Un exemple de code:

function genObsReport() {
var myapp = UiApp.createApplication().setTitle('Report');   
var dateFrom = myapp.createDateBox().setId("dateFrom");  
var dateTo = myapp.createDateBox().setId("dateTo");   
var mygrid = myapp.createGrid(2, 2); 
mygrid.setWidget(0, 0, myapp.createLabel('Date from'));
mygrid.setWidget(0, 1, dateFrom);
mygrid.setWidget(1, 0, myapp.createLabel('Date to'));
mygrid.setWidget(1, 1, dateTo);
var errors = myapp.createLabel('Error').setId('errors').setVisible(false);  
var mybutton = myapp.createButton('Create Report');
var mypanel = myapp.createVerticalPanel();     
mypanel.add(mygrid);
mypanel.add(mybutton);
mypanel.add(errors);
myapp.add(mypanel);  
var handler = myapp.createServerHandler("change");
handler.addCallbackElement(mygrid);  
mybutton.addClickHandler(handler);
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
spreadsheet.show(myapp);  
}
function change(eventInfo) {
var app = UiApp.getActiveApplication();    
var dateFrom = eventInfo.parameter.dateFrom;
var dateTo = eventInfo.parameter.dateTo;
//check the dates
if ((dateFrom == '' && dateTo == '') || (dateFrom != '' && dateTo != '')) {
//do something
} else {
//show errors
app.getElementById('errors').setVisible(true);
app.getElementById('dateFrom').setStyleAttributes({background: "red", color: "black"});
app.getElementById('dateTo').setStyleAttributes({background: "red", color: "black"});
} 
}
  • Dans votre idée de ce que serait la source de déclenchement de la client gestionnaire d'? Il ne peut pas être le bouton, ni les zones de date depuis quand vous cliquez sur une case de date, il obtient automatiquement une valeur... donc je ne vois pas comment la mettre en œuvre dans votre code, même si c'était possible ( ce dont je doute...)
  • un addValueChangeHandler() peut être ajouté à la date de boîtes de déclencher une fonction de serveur pour exécuter la validation tôt, mais le problème avec les zones de date, c'est que une fois que vous jetez une valeur dans l'une puis l'effacer, la valeur reste.
  • Merci Serge et Bryan. Je vois que vous êtes tous les deux en train de dire. Je vais rester avec ma solution actuelle. Des acclamations.
InformationsquelleAutor mosdave | 2013-11-14