Подтвердить что ты не робот

Технология Rails для запуска javascript после перенаправления

Приложение Rails (3.2.8) и turbolinks (не уверены, если уместно).

  • У меня есть информация, link на странице показа пользователей. (Например, уведомление о том, что что-то изменилось.)
  • Когда пользователь нажимает на ссылку, я хочу направить его на страницу и
  • Визуально выделите элементы, которые изменились.

В настоящее время я планирую обрабатывать его следующим образом:

Создайте ссылки так, чтобы они имели форму:

project2/comment.1453

Создайте notifications controller,, который получает projects2 и тип изменения comment и его id 1453. Поэтому теоретически я хочу перенаправить на projects2 и выделить комментарий с id 1453 на этой странице. Проблема заключается в следующем: после перенаправления, как я могу выделить комментарий?

notificationscontroller.rb(Псевдо код!)

def show
  project = Project.find(params[:project_id])
  comment = Comment.find(params[:commment_id])
  redirect_to project AND highlight!
end

Во время моего исследования я столкнулся с Backbone, и похоже, что маршрутизатор Backbones мог решить эту проблему, отвечая на url с помощью функции (выделение комментария). Но у меня нет опыта работы с Backbone.

Я не уверен, что общий подход к такого рода функциям. И хотелось бы избежать неправильного пути. Было бы здорово, если бы вы могли помочь мне.

Изменить: Вид мини-вопроса: я не уверен, какой символ использовать для comment.1453 является # лучшим выбором? (comment#1453)

4b9b3361

Ответ 1

Вы не можете запускать javascript после перенаправления, кроме включения javascript на странице, на которую вы перенаправляете.

Вы хотите передать информацию из этого запроса в следующий (перенаправленный) запрос.

Вспышка - хороший способ сделать это. Обычно вы используете его для текстовых сообщений:

redirect_to project, notice: "Project foo bar message"

или

flash[:notice] = "Project foo bar message"
redirect_to project

Нет ничего, что помешало бы вам использовать другие идентификаторы во флэш-памяти и хранить JSON в своих.

flash[:highlight_ids] = "[12, 43, 472, 482]"
redirect_to project

Затем в вашем макете или где-нибудь извлеките это флэш-сообщение на JavaScript:

var highlight_ids = <%= flash[:highlight_ids] %>;

Затем сделайте свое волшебство javascript, чтобы выделить фактические элементы.

Ответ 2

Один из возможных способов:

Сохраните идентификатор (и возможный тип объекта, если необходимо выделить не только комментарии) в сеансе или непосредственно в файле cookie (show в вашем псевдокоде)

def show
  project = Project.find(params[:project_id])
  comment = Comment.find(params[:commment_id])
  cookies[:highlight_id] = comment.id
  cookies[:highlight_type] = 'Comment' # optionally
  redirect_to project
end

В диспетчере проектов show action

def show
  ...
  if cookies[:highlight_id] and cookies[:highlight_type]
    @highlight_id = cookies[:highlight_id]
    @highlight_type = cookies[:highlight_type]
    cookies.delete[:highlight_id]
    cookies.delete[:highlight_type]
  end

И в представлении комментариев

<div class="some_class <%= highlight(@comment, @highlight_id, @highlight_type %>" ...

Где highlight - помощник типа

def highlight(object, object_id, object_type)
  if object_id and object_type and object.is_a?(object_type.classify.constantize)
    'highlighted'
  end
end