tabla plugin inspinia editable jquery ruby-on-rails ruby jeditable

plugin - Ruby on Rails y jeditable(jquery)



jquery jeditable (5)

Discúlpenme por mencionar esto solo ahora, pero acabo de encontrar el momento de revisar mi código nuevamente. Creo que resolví mi problema con el siguiente javascript (mi application.js dentro de los rieles):

jQuery(document).ready(function($) { $(".edit_textfield").each( function(i) { $(this).editable("update", { type : ''textarea'', rows : 8, name : $(this).attr(''name''), cancel : ''Cancel'', submit : ''OK'', indicator : "<img src=''../images/spinner.gif'' />", tooltip : ''Double-click to edit...'' }) }); });

Esto funciona, si las URL de su controlador son RESTful.

¿Alguien ha conseguido que jquery plugin jeditable se ejecute correctamente en las aplicaciones de Rails? Si es así, ¿podría compartir algunas sugerencias sobre cómo configurarlo? Tengo problemas para crear la "URL de envío".

IIRC, no puedes simplemente llamar al código ruby ​​desde javascript (por favor, déjame estar equivocado :-). ¿Te refieres a RJS? ¿No está eso limitado a Prototype? Estoy usando jQuery.

ACTUALIZAR:
uh ..... preguntó esto hace un tiempo y mientras tanto cambió a una solución diferente. Pero IIRC mi principal problema fue el siguiente:

Estoy usando los recursos RESTful. Entonces digamos que tengo que modelar un blog y así tener el recurso "publicaciones". Si deseo editar una publicación (por ejemplo, la publicación con ID 8), mi actualización se envía por HTTP a la URL http://my.url.com/posts/8 con el verbo HTTP POST. Sin embargo, esta URL está construida en mi código Rails. Entonces, ¿cómo obtendría mi URL de envío en mi código jQuery? Como este es un código RESTful, mi URL de actualización cambiará con cada publicación.


No estoy seguro de entender por completo el problema que tienes, pero creo que podrías poner algo como esto en tu javascript:

<%= url_for(@post) %>

Depende de cómo esté estructurando su javascript, cómo organizó sus archivos, etc.


Si incluye archivos .js en su html, entonces no, pero si tiene js en línea en su plantilla de visualización, entonces sí puede hacerlo.

También puede tener archivos .erb.js, que son vistas js.

Todo es posible: D


Así es como conecté JEditable (1.6.2) con mi relajante aplicación Rails (2.2.2):

Forma en línea:

<div id="email_name"><%= h( @email.name ) %></div> $(''#email_name'').editable( <%= email_path(@email).to_json %>, { name: ''email[name]'', method: ''PUT'', submitdata: { authenticity_token: <%= form_authenticity_token.to_json %>, wants: ''name'' } });

Controlador:

def update @email = Email.find( params[:id] ) @email.update_attributes!( params[:email ) respond_to do |format| format.js end end

update.js.erb

<%= case params[:wants] when ''name'' then h( @email.name ) # add other attributes if you have more inline forms for this model else '''' end %>

Es un poco torpe con esa declaración de cambio. Sería bueno si JEditable simplemente guardara el valor enviado por defecto si la solicitud de ajax fuera exitosa y no se devolviera nada.


Si sus controladores son un poco menos de descanso. Particularmente si tiene una acción para actualizar un campo específico, entonces esto también funciona. La clave es pasar el token de autenticación.

index.html.erb

<span id="my_edit"><%= foo.bar %></span> <script type="text/javascript"> $(document).ready(function() { $("#my_edit").editable(''<%= url_for(:action => "update_bar", :id => foo) %>'', { method: ''PUT'', cancel : ''Cancel'', submit : ''OK'', indicator : "<img src=''../images/spinner.gif'' />", tooltip : ''Double-click to edit...'', submitdata: { authenticity_token: <%= form_authenticity_token.to_json %>, } } }); </script>

Controlador demasiado simplificado que no justifica no estar tranquilo:

foo_controller.rb

def update_bar foo = Foo.find(params[:id]) bar= params[:value] // insert justifiable code here foo.save render :text=>params[:value] end

(Funciona con Rails 2.2.2 y 2.3.2 con Jeditable 1.7.0 y jRails 0.4, aunque jRails no juega mucha interacción aquí aparte de proporcionar los includes para jQuery 1.5)