Rails 3 JQuery page.insert_html и TypeError: Element.insert не является функцией - PullRequest
6 голосов
/ 27 января 2011

Я заменил Prototype на JQuery для Rails 3. Я сейчас пытаюсь сделать следующее:


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

Итак, сгенерированный Javascript:



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;

В документации rails insert_html является помощником Prototype, но я думал, что замена Rails.js на https://github.com/rails/jquery-ujs заменит эти помощники для помощников JQuery. Я получаю TypeError.ElementInsert не является функцией.

Я что-то не так делаю? Или я собираюсь сделать это сам без помощников?

Ответы [ 3 ]

3 голосов
/ 23 июня 2011

Кто-то только что отправил мне этот вопрос, может быть, я могу помочь.Я работаю в команде jquery-ujs / jquery-rails.

В отличие от prototype-ujs для рельсов, jquery-ujs не поставляется в комплекте с поддержкой rjs.Существует отдельная жемчужина, которая обеспечивает эту функциональность под названием jrails .

Мы говорили о слиянии двух проектов , но решили оставить их раздельными, так какгибкий таким образом.

2 голосов
/ 01 февраля 2011

У меня довольно примитивный обходной путь.В моем случае я запустил page.insert_html(:top ,'content', render('form')).

Ошибка вызвана сгенерированным кодом .js.rjs, пытающимся запустить Element.insert (), который является функцией-прототипом.Я не знаю достаточно о rails, чтобы сделать что-то очень продуктивное, однако добавление следующего в мой application.js сработало со мной:

//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);
  };
}

Очевидно, что это базовое и будет работать только с: top,так что подстраивайтесь под свои нужды.Должен быть лучший способ ...

0 голосов
/ 14 марта 2011

yes rails.js - это драйвер js, который js выполняет обратные вызовы для элементов с
атрибут данных в домене. (JS Submit, AJAX ссылки и т.д.)

вам нужно переопределить прототип рельсовых помощников, которые вы не можете ожидать от файла js, если он не переопределяет синтаксис protptype в стиле kdoole.

эта вилка jrails обеспечивает то, что вам нужно, и работает с рельсами 3

однако он не работает с jquery для меня. Я искал современные, но ничего не нашел.

ОБНОВЛЕНИЕ: мне удалось заставить это работать гладко, моя ошибка ...

Я полагал, что большинство людей используют шаблоны js.erb с jquery, который, вероятно, является самым уродливым форматом кода, который я когда-либо видел.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...