Model a javascript

chcialbym moc pobrac dane z modelu za pomoca jakiejs akcji i przekazac je do js tak abym mogl z nich korzystac np:

$(’#panelLinks a’).click(function (){
alert( $zmienna_pobrana_z_modelu );
});

Znalazlem cos o Page.assign “xxx”,“yyy” ale akos mi to ine dzialalo.
Licze na pomoc, pozdrawiam.

Wygląda na to, że page. assign powoduje utworzenie w przestrzeni javascriptu zmiennej o nazwie xxx, wartości yyy.

Zmienna page ma głównie zastosowanie w rjs-ie, więc jeśli w pliku rjs dodasz linię

page.assign 'zmienna', @moj_model.moja_wartosc

to w nastepnych liniach kody js, mozesz uzywac zmiennej ‘zmienna’ i miec pewnosc, ze ma ona wartosc taka jaka wyrzucial metoda moja_wartosc z modelu @moj_model.

jesli chcesz jednak po prostu przekazac wartosc z modelu do js-a to wystarczy, ze sie do niech odwolasz w widoku

<% javascript_tag do -%> $('#panelLinks a').click(function (){ alert( '<%= @zmienna_pobrana_z_modelu -%>' ); }); <% end -%>

A czemu nie próbujesz używać link_to_function?

Z tego co widze to kolega uzywa jQuery. Ja to robie tak:

[code]# layouts/application.html.erb

<%= yield :javascript_tag %>

application_helper.rb

def javascript_tag_in_header(options={}, &block)
content_for(
:javascript_tag,
content_tag(“script”, javascript_cdata_section(capture(&block), options.merge(:type => Mime::JS))
)
end

gdzie potrzeba w widokach html.erb

<% javascript_tag_in_header do %>
var zmiennaPobranaZModelu = <%= zmienna_pobrana_z_modelu.to_json %>
<% end %>

i behaviours w application.js

$(function() {
$(’#panelLinks a’).click(function (){
// if (typeof(zmiennaPobranaZModelu) == “undefined”) return;
// mozna sobie dolozyc powyzsze jezel zachodzi taka potrzeba
alert(zmiennaPobranaZModelu);
return false;
})
})[/code]
Zamiast globalnych zmiennych mozna uzywac hasha (symulowac namespace) np:

var pageData = {}; # w javascript tag w header pageData.zmiennaPobranaZModelu = <%= zmienna_pobrana_z_modelu.to_json %> # w widokach
Ladniejszym rozwiazaniem wydaje sie http://chrisolsen.org/2008/02/15/rubyonrails-and-jquery/ ale tam zdaje sie wychodza zawsze 2 requesty (po html i po javascript) za kazdym razem - imho niepotrzebny narzut.