rails3, jquery mobile и remote => обработка истинных вызовов ajax в формате HTML - PullRequest
4 голосов
/ 09 февраля 2012

Я перебирал несколько постов здесь, а также проверил Railscast для мобильного обнаружения (# 199).У меня есть приложение rails3, которое использует jquery, ajax и format.js и работает нормально.Теперь я пытаюсь распространить приложение на мобильные устройства.

Я использую jquery mobile, и все хорошо отрисовывается, но когда я использую переключатель remote => true на link_to, он не обрабатывает запроскак JS (что обычно происходит в настольной версии).

Вот код ссылки:

<%= link_to 'Up', '/posts/' + String(rbpost.id) + '/upvote', :remote => true, :class => 'upvote', "data-role" => "button", "data-icon" => "arrow-u", "data-iconpos" => "notext" %>

Он обрабатывается как HTML

Started GET "/posts/3/upvote" for 127.0.0.1 at 2012-02-08 11:37:59 -0500

  Processing by PostsController#upvote as HTML

.,.и жалуется, что нет шаблона:

ActionView::MissingTemplate (Missing template posts/upvote, application/
upvote with {:handlers=>[:erb, :builder, :coffee], :formats=>[:mobile], :locale=
[:en, :en]}. Searched in:
  * "C:/rubydemo/testapp/app/views"
):
  app/controllers/posts_controller.rb:74:in `upvote'


Вот как кодируются вещи:

application_controller.rb:

class ApplicationController < ActionController::Base
  protect_from_forgery
  before_filter :adjust_format_for_mobile

private
  # Set iPhone format if request 
  def adjust_format_for_mobile
    if mobile_request?
        if request.format == :js
            request.format = :mobilejs
        else
            request.format = :mobile
        end
    end
  end

# Return true for mobile requests 
  def mobile_request?
    return request.env["HTTP_USER_AGENT"] && request.env["HTTP_USER_AGENT"][/(Mobile\/.+Safari)/]
    #return true
    #I set this to return true always when I'm debugging on the desktop
  end  
end

mime_types.rb:

# Be sure to restart your server when you modify this file.

# Add new mime types for use in respond_to blocks:
# Mime::Type.register "text/richtext", :rtf
 Mime::Type.register_alias "text/html", :mobile
 Mime::Type.register_alias "text/javascript", :mobilejs

posts_controller.rb:

  def upvote
    @post = Post.find(params[:id])
    @post.upvote
    @post.save

    respond_to do |format|
      format.js 
      format.mobilejs
      format.html { redirect_to @post }
      format.json { render json: @post }
    end
  end

У меня есть upvote.js.erb и upvote.mobilejs.erb в моем каталоге views / posts,Он регистрирует тип: mobile, но по какой-то причине не выполняет JavaScript, когда это необходимо.Есть идеи?

Спасибо

1 Ответ

10 голосов
/ 22 февраля 2012

Полагаю, это происходит из-за проблем с JQuery Mobile и Ruby on Rails Ajax Handling.Я исправил ту же проблему, отключив функциональность AJAX JQM для формы:

<%= form_for(AgendaItem.new, :remote => true, :html =>{ "data-ajax" => false}) do |f| %>
...