jQuery + Ajax + Haml. Файлы js.erb не запускаются - PullRequest
3 голосов
/ 05 августа 2010

После прочтения нескольких опытов, я чувствую, что эту проблему, возможно, придется поднимать снова. Кодируя в Rails3, я пытаюсь реализовать некоторые плавные Ajax-эффекты, когда пользователь пытается создать публикацию в другом элементе моего приложения. Вот код, который меня интересует:

приложение / просмотров / сообщений / new.html.haml

- form_for @post, :remote=>true do |f|
    = f.text_area :content
    = submit_tag "Post"

приложение / контроллеры / post_controller.rb

def create
  @comment = Post.new(params[:post])
  @comment.save
end

приложение / просмотров / сообщений / create.js.erb:

alert("ajax worked!");

Я следовал тому, что видел на UJS Railscast , но, похоже, ничего не стреляет. Не только это, но Firebug не может дать мне никаких описательных доказательств того, что происходит. Он говорит мне, что он сделал новый объект post после отправки, но ничего более.

Есть идеи?

Ответы [ 3 ]

10 голосов
/ 05 августа 2010

Я нашел ответ!Проблема была в том, что когда контроллер рендерил представление, оно включало общий макет моего приложения;макет уступал действию рендеринга, поэтому мой код javascript, содержащийся в моем файле .js.erb, был вылит в мой application.rhtml.Я исправил эту проблему, включив это в действие моего контроллера для отображения моих сообщений:

respond_to do |format|
  format.js {render :layout=>false}
end
0 голосов
/ 22 августа 2011

Когда мой макет был закодирован в Haml (application.haml), AJAX не запускался, и упомянутый обходной код kelly.dunn не работал.

respond_to do |format|
  format.js {render :layout=>false}
end

Самым простым решением былопреобразовать макет приложения в формат .html.erb.

0 голосов
/ 09 февраля 2011

Смотреть Railscast

<%= form_tag products_path, :method => 'get', :id => ↵  
  "products_search" do %>  
  <%= hidden_field_tag :direction, params[:direction] %>  
  <%= hidden_field_tag :sort, params[:sort] %>  
  <p>  
    <%= text_field_tag :search, params[:search] %>  
    <%= submit_tag "Search", :name => nil %>  
  </p>  
<% end %>

и в Js

// Search form.  
  $('#products_search').submit(function () {  
    $.get(this.action, $(this).serialize(), null, 'script');  
    return false;  
  });  
});
...