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 -%>
<% 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.