2009-08-01 5 views
2

In einem Ruby on Rails-Projekt muss am Ende eines Ajax-Aufrufs eine JavaScript-Funktion ausgeführt werden. Mein Problem ist, dass die Werte, die in die JavaScript-Funktion übergeben werden, die mit page.call aufgerufen wird, in Anführungszeichen eingeschlossen werden. Kein Problem, wenn Sie Strings übergeben, aber einer der Werte ist eine String-Repräsentation eines JavaScript-Arrays, d. H. [0,1,2,3].Weiterleiten von Objekten aus Rails RJS an einen JavaScript-Funktionsaufruf ohne Angabe der Werte?

Hier sind, was ich fühle, sind die wichtigen Codeschnipsel.

Ich habe ein beobachtungsfeld, das eine ausgewählte Dropdown-Liste überwacht.

<%= observe_field("project_select_list", 
    :loading => "Element.show('tree_indicator')", 
    :complete => "Element.hide('tree_indicator')", 
    :url => {:controller => "projects", :action => "change_project"}, 
    :with => "id") 
%> 

Im project_controller

def change_project() 
    @current_project = Project.find(params[:id]) 
end 

Und in change_project.rjs

page.replace_html("project_name", @current_project.name) 
page.visual_effect(:highlight, "project_name") 
page.call("buildYUITreeView", "project_tree", @current_project.get_directory_contents(@current_project.local_path, 0)) 

Der letzte Wert:

@current_project.get_directory_contents(@current_project.local_path, 0)) 

ist das, was mir Probleme verursacht. Ich möchte nur, dass es den Wert sendet, zum Beispiel [0,1,2,3], aber es sendet "[0,1,2,3]", was den JS dazu bringt, zu explodieren.

Dieses Teil tut, was es soll, indem es die Daten und nicht eine Zeichenfolge an den JavaScript-Code sendet, der auf der Seite platziert wird.

<% javascript_tag do -%> 
    YAHOO.util.Event.addListener("dom:loaded", "load", buildYUITreeView("<%= tree_id %>", <%= project.get_directory_contents(project.local_path, 0) %>)); 
<% end -%> 

dies mit daran spiele ich um eine teilweise mit der Verwendung und einfach machen es die JS-Funktion aufzurufen, wenn es sein muss, aber das scheint wie ein solcher Hack.

Wie kann ich page.call veranlassen, die als Parameter gesendeten Daten nicht in Anführungszeichen zu schreiben, oder wie soll ich diese Daten an die JS-Funktion zur Ausführung übergeben, nachdem der Ajax-Aufruf abgeschlossen ist?

Antwort

4

Tom auf dem richtigen Weg war, ist die << Methode der Weg zu gehen, weil es direkt jede Javascript einsetzen wird. Sie möchten das anstelle von call verwenden.

page << "buildUYITreeView('project_tree', #{@current_project.get_directory_contents(@current_project.local_path, 0))})" 

Sie können mit der YAHOO Linie das gleiche tun wie tom zeigte die effizienter sein sollte, eine teilweise mit einem JavaScript-Tag als verwenden.

1

Sie die < < Methode anstelle raw Javascript auszusenden verwenden:

page << 'YAHOO.util.Event.addListener("dom:loaded", "load", buildYUITreeView("project_tree", '[email protected]_project.get_directory_contents(@current_project.local_path, 0)+'))' 
+0

Danke für die Antwort aber .. Ich denke, dass Sie die richtige Frage nicht beantwortet haben. Mein Problem ist mit der page.call ("buildYUITreeView", "project_tree", @ current_project.get_directory_contents (@ current_project.local_path, 0)) Aufruf in der RJS-Datei nicht in der partiellen. –

+0

Ok, hab ich. Entschuldigung, ich habe nicht nahe genug gelesen. Bearbeiten der Antwort – tom

Verwandte Themen