Технология 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
)
Ответы
Ответ 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