Rails UJS рендеринг шаблона js.erb в IE - PullRequest
3 голосов
/ 25 сентября 2010

У меня есть приложение RoR под управлением rails 2.3.8, которое использует UJS в стиле Rails 3 для привязки форм с удаленным доступом к данным вместо использования form_for_remote, контроллер отвечает файлом js.erb с сервера.

Прекрасно работает в FF, Chrome и Safari, но при запуске в IE он предлагает сохранить файл и не выполняет JS. Мои исследования пока не выявили возможных причин для этого, поэтому любая помощь будет принята с благодарностью!

Вот мое действие контроллера:

  def create
    @note = Note.create(params[:note].merge(:author_id => current_user.id))
    respond_to do |format|
      format.js {}
    end
  end

Я также попробовал это вместо блока response_to, который имеет тот же результат:

render :template => "notes/create.js.erb", :content_type => 'text/javascript'

И мой create.js.erb:

$('#notes').append('<%= escape_javascript(render(:partial => "notes/note", :locals => {:note => @note}))%>');
$('.new_note textarea').val('');

Все довольно просто, я действительно не понимаю, что не так с IE.

Спасибо за любую помощь!

Edit:

Форма для размещения заметки:

<% form_for @note, :url => notes_path, :html => { 'data-remote' => true, :class =>         
    'new_note'} do |f|%>
  <%= f.hidden_field :parent_id %>
  <%= hidden_field_tag :note_type, note_type%>
  <%= f.text_area :body, :size => size%>
  <br/>
  <%= f.submit "Add Note"%>
<% end %>

И соответствующая часть rails.js:

$('form[data-remote]').live('submit', function (e) {
    $(this).callRemote();
    e.preventDefault();
});

/**
     * Handles execution of remote calls firing overridable events along the way
     */
    callRemote: function () {
        var el      = this,
            method  = el.attr('method') || el.attr('data-method') || 'GET',
            url     = el.attr('action') || el.attr('href'),
            dataType  = el.attr('data-type')  || 'script';

        if (url === undefined) {
          throw "No URL specified for remote call (action or href must be present).";
        } else {
            if (el.triggerAndReturn('ajax:before')) {
                var data = el.is('form') ? el.serializeArray() : [];
                $.ajax({
                    url: url,
                    data: data,
                    dataType: dataType,
                    type: method.toUpperCase(),
                    beforeSend: function (xhr) {
                        el.trigger('ajax:loading', xhr);
                    },
                    success: function (data, status, xhr) {
                        el.trigger('ajax:success', [data, status, xhr]);
                    },
                    complete: function (xhr) {
                        el.trigger('ajax:complete', xhr);
                    },
                    error: function (xhr, status, error) {
                        el.trigger('ajax:failure', [xhr, status, error]);
                    }
                });
            }

            el.trigger('ajax:after');
        }
    }

Сервер отвечает: Content-Type: text / javascript; кодировка = UTF-8 * +1026 *

Я пытался явно установить тип данных для помощника rails.js, но это ничего не изменило.

Ответы [ 2 ]

1 голос
/ 26 сентября 2010

Очевидно, что решение здесь состояло в том, чтобы просто заменить другую версию rails.js

Не уверен, почему тот, который у меня не работал, но похоже, что это не было ошибкой ни в одном из приведенных выше кодов.

0 голосов
/ 19 октября 2010

Было бы здорово узнать, какую версию вы использовали для исправления проблемы.

Обновление: ОК, так что мой сценарий состоял в том, что я использовал jQuery 1.4.2 с последним rails.js.Когда я обновился до jQuery 1.4.3, это решило мою проблему.

...