2012-12-19 4 views
12

Rails App (3.2.8) und Turbolinks (nicht sicher, ob relevant) aktiviert.Rails-Technik zur Ausführung von Javascript nach Umleitung

  1. Ich habe einige Informationen, eine link auf einer Benutzershowseite. (Zum Beispiel eine Benachrichtigung, dass sich etwas geändert hat.)
  2. Wenn der Benutzer klickt auf den Link ich ihn auf die Seite und
  3. Optisch lenken wollen markieren Sie die Elemente, die geändert. Ich plane es so

Zeit zu handhaben:

die Links erstellen, so dass sie von der Form sind:

project2/comment.1453

eine notifications controller, erstellen, die die projects2 bekommt und die Art der Änderung comment und seine ID 1453. In der Theorie möchte ich auf projects2 umleiten und den Kommentar mit der ID 1453 auf dieser Seite hervorheben. Das Problem ist: Nach der Weiterleitung wie markiere ich den Kommentar?

notificationscontroller.rb (Pseudo-Code!)

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

Während meiner Recherchen habe ich über Backbone kommen, und es sieht aus wie Backbones Router dieses Problem mit einer Funktion (die Hervorhebung durch Reagieren auf die URL lösen könnte des Kommentars). Aber ich habe keine Erfahrung mit Backbone.

Ich bin mir nicht sicher, was der allgemeine Ansatz für diese Art von Funktionalität ist. Und möchte vermeiden, den falschen Weg zu gehen. Wäre toll wenn du mir helfen könntest.

Bearbeiten: Sortieren einer Mini-Frage: Ich bin mir nicht sicher, welches Zeichen für comment.1453# eine bessere Wahl ist? (comment#1453)

Antwort

4

Sie können JavaScript nicht nach einer Weiterleitung als javascript auf der Seite, auf die Sie umleiten, ausführen.

Sie möchten Informationen von dieser Anfrage an die nächste (umgeleitete) Anfrage weiterleiten.

Der Blitz ist ein guter Weg, dies zu tun. Normalerweise es für Textnachricht verwenden you'ld:

redirect_to project, notice: "Project foo bar message" 

oder

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

Es gibt nichts, das eine Verwendung andere Identifikatoren im Flash stoppt und in ihrer JSON zu speichern.

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

Dann in Ihrem Layout oder irgendwo extrahieren diese Flash-Nachricht an JavaScript:

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

Dann tun Sie Javascript Magie die tatsächlichen Elemente zu markieren.

+0

ich so das Gefühl ist ein sauberer Weg, als die Informationen in einem Cookie gespeichert werden, so werde ich diese Antwort akzeptieren. Vielen Dank – wpp

2

Ein möglichen Wege:

Shop die ID (und möglicher Objekttyp bei Bedarf nicht nur Kommentare markieren) in der Sitzung oder direkt im Cookie (show Aktion in Ihrem Pseudo-Code)

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 

in Projekten Controller show Aktion

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 

Und in den Kommentaren Ansicht

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

Wo highlight ist ein Helfer wie

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