Использование response_to для постепенной деградации с помощью ajax в RoR 2.x - PullRequest
3 голосов
/ 29 сентября 2008

Я просматривал книгу AWDR по веб-разработке с ruby ​​на рельсах, и одна из проблем со старым кодом заключалась в том, что он не использовал response_to, чтобы убедиться, что используемое представление будет представлением javascript. Теперь в некоторых обновленных примерах, которые я видел, люди упоминают их позже, когда реализуют постепенную деградацию, используйте request.xhr? чтобы сказать, если у пользователя включен JavaScript, и если нет, они перенаправляют пользователя.

Мне было интересно, можете ли вы использовать response_to для получения того же поведения, и если да, то считается ли это хорошей формой или нет и почему?

Так что я думаю о чем-то вроде:

def function
  respond_to do |format|
    format.js do
      basic_stuff
    end
    format.html do
      basic_stuff
      user_redirect
    end
  end
end

Это похоже на нарушение принципа СУХОЙ, и я, вероятно, что-то упускаю из-за того, как пользователь и сервер взаимодействуют здесь. Честно говоря, документация по API не дала мне полной ясности.

1 Ответ

2 голосов
/ 29 сентября 2008

Ну, вы можете рефакторинг так:

def function
  basic_stuff # executed regardless of the mime types accepted
  respond_to do |format|
    format.html do
      user_redirect
    end
  end
  # will fall back rendering the default view - which you should ensure will be js
end

request.xhr? просматривает заголовок запроса X-Requested-With (чтобы узнать, содержит ли он «XMLHttpRequest»). respond_to смотрит на принятые типы пантомимы.

Вы можете использовать любой из них для реализации некоторой грациозной деградации.

НО Вы не сможете использовать xhr? для изящной деградации, если ваши ajax-вызовы не установят этот заголовок (Prototype делает это автоматически).

Более того, respond_to обеспечивает большую гибкость, т. Е. Отправку xml, json, js, независимо от того, что это может быть из того же блока.

Так что я бы рекомендовал respond_to здесь.

...