Domanda

Stavo sfogliando il libro AWDR sullo sviluppo web con ruby ??su rotaie e uno dei problemi con il vecchio codice era che non usava respond_to per assicurarsi che la vista usata fosse la vista javascript. Ora in alcuni esempi aggiornati ho visto le persone menzionare che in seguito, quando implementano un degrado aggraziato, usi request.xhr? per dire se l'utente ha javascript abilitato e, in caso contrario, reindirizzare l'utente.

Mi chiedevo se avresti potuto usare respond_to per ottenere lo stesso comportamento e, in tal caso, se questo è considerato in buona forma o no e perché?

Quindi quello che sto pensando di fare è qualcosa di simile:

def function
  respond_to do |format|
    format.js do
      basic_stuff
    end
    format.html do
      basic_stuff
      user_redirect
    end
  end
end

Sembra in qualche modo violare il principio DRY, e probabilmente mi manca qualcosa su come l'utente e il server interagiscono qui. Ad essere onesti, la documentazione dell'API non mi ha chiarito del tutto.

È stato utile?

Soluzione

Bene, puoi refactoring in questo modo:

def function
  basic_stuff # executed regardless of the mime types accepted
  respond_to do |format|
    format.html do
      user_redirect
    end
  end
  # will fall back rendering the default view - which you should ensure will be js
end

request.xhr? esamina l'intestazione X-Requested-With della richiesta (per vedere se contiene " XMLHttpRequest "). respond_to esamina i tipi di mime accettati.

Puoi usare entrambi per implementare una sorta di degredazione aggraziata.

MA Non sarai in grado di usare xhr? per un degredation aggraziato a meno che le tue chiamate ajax non impostino quell'intestazione (Prototype lo fa automaticamente).

Inoltre, respond_to offre maggiore flessibilità, ad esempio inviando xml, json, js, qualunque cosa possa provenire dallo stesso blocco.

Quindi consiglierei respond_to qui.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top