2011-01-27 12 views
6

Substituí prototipo con jQuery para Rails 3. Ahora estoy tratando de hacer lo siguiente:Rails 3 jQuery page.insert_html y TypeError: Element.insert no es una función


    #photo 
    =render 'shared/photo' 
    = link_to_function "Add a Photo" do |page| | 
     page.insert_html :bottom, 'photo', :partial => 'shared/photo', :object => Photo.new | 
    end | 

Así que el Javascript es generada :



try { 
    Element.insert("photo", { 
     bottom: "Data\n\n" 
    }); 
} catch (e) { 
    alert('RJS error:\n\n' + e.toString()); 
    alert('Element.insert(\"photo\", { bottom: \"Data\\n\\n\" });'); 
    throw e 
}; 
return false; 

En el insert_html carriles Docs es un ayudante del prototipo, pero pensé que la sustitución de rails.js con el https://github.com/rails/jquery-ujs reemplazaría esta ayudantes para ayudantes jQuery. Obtengo un TypeError.ElementInsert no es una función.

¿Estoy haciendo algo mal? ¿O voy a hacer esto yo mismo sin los ayudantes?

Respuesta

3

Alguien me acaba de enviar esta pregunta, quizás pueda ayudar. Estoy en el equipo jquery-ujs/jquery-rails.

A diferencia de prototype-ujs para rieles, jquery-ujs no viene incluido con soporte para rjs. Hay una gema separada que proporciona esa funcionalidad llamada jrails.

We've talked about merging the two projects, pero decidimos mantenerlos separados, ya que es más flexible de esa manera.

2

Tengo una solución bastante rudimentaria. En mi caso, he ejecutado page.insert_html(:top ,'content', render('form')).

El error es causado por el código .js.rjs generado que intenta ejecutar Element.insert(), que es una función de prototipo. No sé lo suficiente sobre raíles que hagan algo muy productivo, sin embargo añadiendo lo siguiente a mis application.js me ha funcionado formar:

//Check if the function exists 
if (typeof Element.insert !== "function") { 
    //If not, hook it onto the $().append method. 
    Element.insert = function (elem, ins) { 
    $("#" + elem).append(ins.top); 
    }; 
} 

Obviamente, esto es básico y sólo funcionará con: la parte superior, por lo que ajustar a tus necesidades Debe haber una mejor manera ...

0

sí rails.js es un controlador js que hace devoluciones de llamada en los elementos con
un atributo de datos en el dom. (js submit, enlaces ajax, etc.)

lo que necesita es una redefinición de prototipos de auxiliares de rieles que no puede esperar de un archivo js a menos que reimplemente la sintaxis protptype a la kdoole.

this fork of jrails proporciona lo que necesita y trabaja con los carriles 3

sin embargo, no funciona con jQuery para mí. busqué actualizaciones pero no encontré nada.

ACTUALIZACIÓN: Me las arreglé para hacer que funcione sin problemas, mi culpa ...

me di cuenta la mayoría de la gente utiliza las plantillas js.erb con jQuery que es probable que el formato de código más feo que he visto .

Cuestiones relacionadas