2012-12-19 16 views
12

Rails app (3.2.8) i turbolinks (nie wiem, czy dotyczy) włączone.Technika Railsów do wykonywania javascript po przekierowaniu

  1. Mam pewne informacje, link na stronie użytkowników. (Na przykład zgłoszenie, że coś się zmieniło.)
  2. Gdy użytkownik kliknie link chcę skierować go na stronie i
  3. Wizualnie wyróżnić elementy, które zmieniły.

Obecnie mam zamiar obsługiwać go tak:

Tworzenie powiązań więc są one w postaci:

project2/comment.1453

Tworzenie notifications controller, pobierającą projects2 i tym rodzaj zmiany comment i jej identyfikator 1453. Więc teoretycznie chcę przekierować do projects2 i zaznaczyć komentarz o identyfikatorze 1453 na tej stronie. Problem polega na tym, że po przekierowaniu w jaki sposób wyróżnić komentarz?

notificationscontroller.rb (Pseudo kod!)

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

Podczas moich badań natknąłem kręgosłup, i wygląda na to ruter kręgosłupy może rozwiązać ten problem poprzez reagowanie na url z funkcją (podświetlenie komentarza). Ale nie mam żadnego doświadczenia z kręgosłupem.

Nie jestem pewien, jakie jest ogólne podejście do tego rodzaju funkcjonalności. I chciałbym uniknąć zejścia na złą drogę. Byłoby wspaniale, gdybyś mógł mi pomóc.

Edycja: sortowanie mini pytania: nie jestem pewien, którego bohatera użyć, by # był lepszym wyborem? (comment#1453)

Odpowiedz

4

Nie można uruchomić javascript po przekierowaniu, poza włączeniem javascript na przekierowanej stronie.

Co chcesz przenieść informacje z tego żądania do następnego (przekierowanego) żądania.

Lampa błyskowa to dobry sposób na zrobienie tego. Normalnie you'ld użyć go do wiadomości tekstowych:

redirect_to project, notice: "Project foo bar message" 

lub

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

Nic nie przestaje korzystać z innych identyfikatorów w pamięci flash i przechowywania w ich JSON.

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

Następnie w układzie albo gdzieś wyodrębnić tę wiadomość flash JavaScript:

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

Następnie wykonać magii javascript, aby podświetlić rzeczywistych elementów.

+0

czuję się jak to jest czystsze niż sposób, aby zapisać informacje w pliku cookie, więc zamierzam zaakceptować tę odpowiedź. Dzięki – wpp

2

Jednym z możliwych sposobów:

przechowywania identyfikatora (i możliwe, typ obiektu, jeśli potrzeba, aby wyróżnić się nie tylko komentarze) w sesji lub bezpośrednio w pliku cookie (show działanie w pseudo-kodzie)

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 

w kontrolerze projektów show działanie

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 

A w wyświetl komentarze

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

Gdzie highlight jest pomocnikiem jak

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