web-dev-qa-db-fra.com

rails API respond_to format.js

Je suis un développeur expérimenté Java et C++ et j'essaie de comprendre comment fonctionne Rails.

J'ai obtenu ce code ci-dessous:

respond_to do |format|
      if @line_item.save
        format.html { redirect_to store_url }
        format.js { render :json => @line_item, :mime_type => Mime::Type.lookup('application/json'), 
                :callback => 'javascriptFunction' }

et j'ai cherché l'api qui définit ce que je peux passer à l'intérieur du format.js {} mais je n'ai pas pu trouver ..

tout d'abord: quel genre de déclaration est format.js, est-ce une variable?

et le plus important: quels attributs puis-je passer dans format.js {}? pouvez-vous passer le lien direct? J'ai cherché sur http://api.rubyonrails.org/

41
thiagoh
respond_to do |format|
  format.js # actually means: if the client ask for js -> return file.js
end

js spécifie ici un type MIME que la méthode du contrôleur renverrait en réponse;
Par défaut Rails mime-types .
Si vous essayez également avec format.yaml:

respond_to do |format|
  format.js
  format.yaml
end

cela signifie que votre contrôleur renverra yml ou js selon ce que le côté client demande;

{} en termes de Ruby est un bloc ; Si vous n'en spécifiez pas Rails essaiera de rendre un fichier par défaut) depuis l'application/vues/[nom du contrôleur]/[nom de la méthode du contrôleur]. [html/js/...]

# app/controllers/some_controller.rb
def hello
  respond_to do |format|
    format.js
  end
end

recherchera /app/views/some/hello.js.erb; // au moins dans Rails v. 2.3.

Si vous spécifiez un bloc:

respond_to do |format|
    # that will mean to send a javascript code to client-side;
    format.js { render             
        # raw javascript to be executed on client-side
        "alert('Hello Rails');", 
        # send HTTP response code on header
        :status => 404, # page not found
        # load /app/views/your-controller/different_action.js.erb
        :action => "different_action",
        # send json file with @line_item variable as json
        :json => @line_item,
        :file => filename,
        :text => "OK",
        # the :location option to set the HTTP Location header
        :location => path_to_controller_method_url(argument)
      }

  end
103
ted

Je crois que c'était l'url que vous cherchiez:

https://apidock.com/Rails/ActionController/MimeResponds/InstanceMethods/respond_to

Cela peut également être utile pour certains, pour voir que vous pouvez réellement rendre js directement dans la méthode format.js, si vous n'avez par exemple qu'une petite instruction js d'une ligne que vous souhaitez renvoyer, et que vous ne veulent pas s'en remettre à un fichier RJS comme controller_action_name.js.erb:

respond_to do |format|
  format.html { redirect_to new_admin_session_path }
  format.js   { render :js => "window.location='#{ new_admin_session_path }'" }
end
9
Magne