2010-09-24 2 views
3

У меня есть приложение RoR, работающее с рельсами 2.3.8, которое использует UJS стиля Rails 3 для привязки удаленных форм данных вместо использования form_for_remote, контроллер отвечает js.erb файл с сервера.Rails UJS-рендеринг js.erb шаблон в IE

Прекрасно работает в 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 

Я также попытался это вместо блока respond_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 %> 

И relelvent часть 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: текст/Javascript; charset = utf-8

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

+0

В какой версии IE он не работает? Я проверяю его с помощью IE8, и он работает для меня (rails 2.3.8, jquery UJS, шаблон HAML и у меня нет '{}' после 'format.js' в блоке' response_to'.) – Voldy

+0

Это происходит для меня в IE8 как в режиме совместимости, так и вне его, я также попытался потерять {} на моем формате.js, но я получаю тот же результат, он предлагает сохранить файл. – Chelsea

+0

Не могли бы вы показать ссылку на 'create'? Какие javascripts находятся в 'head'? – Voldy

ответ

1

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

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

0

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

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

+0

Я не совсем уверен, в какую версию я переключился, просто схватил один из предыдущего проекта. Последнее отсюда должно быть хорошо: http://github.com/rails/jquery-ujs – Chelsea