Pour répondre à ma propre question après quelques mois d'essai à l'aide de différentes méthodes. Ma solution est la suivante (avec Rails).
Pour tout formulaire qui requiert un téléchargement de fichier, je mettrais data-remote="true"
et enctype="multipart/form-data"
et comprennent rails.js et jquery.iframe-transport.js.
Paramètre data-remote="true"
avec rails.js me permet de lier ajax:success
et de créer la Backbone.js modèle à succès.
HTML:
<form action="/posts.js" method="post" data-remote="true" enctype="multipart/form-data">
<input type="text" name="post[message]" />
<input type="file" name="post[file]" />
<button>Submit</button>
</form>
JavaScript:
Vous devez évidemment lier ajax:error
pour traiter les cas d'erreur.
Pour moi, les données sont désinfectés dans l' ActiveRecord
modèle, donc ne pas avoir à trop se soucier de la eval
déclaration.
$('form').bind('ajax:success', function(event, data) {
new Model(eval(data)); // Your newly created Backbone.js model
});
Rails De Contrôleur:
class PostsController < ApplicationController
respond_to :js
def create
@post = Post.create(params[:post])
respond_with @post
end
end
Rails (Vue de créer.js.haml):
À l'aide de la remotipart gem.
Cela permettra de traiter le cas lorsque le formulaire ne les uploads de fichier avec enctype
d'être ensemble, et quand il n'est pas.
Vous pouvez choisir d'appel sanitize
sur votre réponse ici.
= remotipart_response do
- if remotipart_submitted?
= "eval(#{Yajl::Encoder.encode(@post)});"
- else
=raw "eval(#{Yajl::Encoder.encode(@post)});"