2011-07-12 6 views
6

Qual è il modo migliore per gestire i moduli in jqm?Come gestire lo stato di errore del modulo in jQuery Mobile e restituire HTML?

Ad esempio, diciamo che l'utente compila un modulo e alcuni dei dati non convalidano. Non viene rilevato dalla convalida JS, ma innesca alcune logiche di business che indicano che il sistema non può procedere.

In jqm, il modulo verrebbe restituito all'utente e il framework lo caricherà e vi si dirigerà. Aspettatevi, non voglio che venga navigato perché non è un nuovo stato - voglio solo che mostri il modulo aggiornato con un messaggio di errore. Non voglio disabilitare anche ajax, poiché questo aggiunge un inutile caricamento completo della pagina.

Idealmente, quello che vorrei è un modo per dire a jqm di non transitare o includere la risposta nella storia - piuttosto basta mostrarlo al posto di ciò che è lì.

L'unico modo in cui posso vedere questo funzionamento è scrivere il mio piccolo gestore di moduli e restituire JSON dal server, che include uno stato di errore. Se l'invio è stato corretto, passare alla pagina successiva, altrimenti aggiornare l'html nella vista con l'html restituito come parte dell'oggetto JSON che include eventuali messaggi di errore.

Sembra che ci deve essere un modo migliore però?

Grazie

+0

+1 buona domanda. avrei fatto in modo simile a quello che hai descritto, ma se c'è un'opzione migliore, ascoltala. – Tsar

risposta

2

Buona domanda e troppo sarei interessato a vedere ciò che gli altri hanno da dire. Per quello che vale, in una recente app (che ha anche dovuto funzionare off-line), sono andato lungo il percorso proposto con i miei moduli:

  1. Prevenita l'azione di invio predefinita.
  2. Utilizzato una chiamata Ajax da un pulsante, che controlla i dati prima di inviarli a un servizio Web o semplicemente salvandoli nel database locale (in base a un flag di stato e se siamo on-line o meno).
  3. Assicurarsi che tutti i relativi messaggi di successo/errore risalgano attraverso il callback di invio in modo che possiamo ...
  4. ... aggiornare la stessa pagina html con i risultati dell'invio dell'utente.

Questo funziona bene e gli utenti sono felici. Tuttavia, si adatta alla mia particolare serie di circostanze: non volevo utilizzare alcuna roba querystring/location.hash perché (a) jQM a volte impazzisce con gli hash e, (b) potenzialmente l'utente sarà offline (e nessun server web significa no querystring). Il tuo chilometraggio può variare, naturalmente.

EDIT: codice per aggiornare una pagina con i messaggi per la mia app ho voluto un elenco di messaggi da visualizzare nella pagina corrente, se necessario, in modo da avere una lista non ordinata vuota (messages) nella pagina HTML in questione, che a sua volta si trova all'interno di un div stilizzato (message-pane). Ecco uno snippet di codice che mostra come avviene l'aggiornamento (nota la chiamata refresh, richiesta in jQM). Potresti attivare un codice come questo dal tuo gestore di ajax:

+0

Sì, sto pensando che una cosa del genere sarà la migliore. Quando parli di aggiornare la stessa pagina: quale meccanismo hai usato per fare questo? Attualmente le mie opinioni vengono restituite "complete".Potrei includere l'html aggiornato nel ritorno JSON ma non riesco a pensare ad un bel modo di aggiornare il DOM senza rompere jQuery Mobile. Come lo hai fatto? – Sergio

+0

@ Sergio Ho aggiornato la mia risposta con un codice di esempio; è quello che stai cercando? – Ben

+0

ah vedo. sì, questo è quello che volevo sapere. Stavo pensando di restituire un intero modulo. Questo metodo avrebbe funzionato per quello. Interessante (un po 'un problema secondario) Sono interessato a come hai costruito l'app per funzionare offline, questo è qualcosa che dovrei prendere in considerazione. Per un'altra volta forse! – Sergio

Problemi correlati