Dynamiczne menu CoffeeScrtip

Witam probuje stworzyc dynamiczne menu dopdown.
Mam model Post w ktorym wybieram marke i model samochodu. Najpierw chce wybrac marke a potem automatycznie za pomoca skryptu model.
Ponizej moj post.js.coffee

jQuery ->
  car_models = $('#post_car_model_id').html()
  $('#post_car_marke_id').change ->
  car_marke = $('#post_car_marke_id :selected').text()
  escaped_car_marke = car_marke.replace(/([ #;&,.+*~\':"!^$[\]()=>|\/@])/g, '\\$1')
  options = $(car_models).filter("optgroup[label='#{escaped_car_marke}']").html()
if options
  $('#post_car_model_id').html(options)
else
  $('#post_car_model_id').empty()
div class="field">
   <%= f.collection_select :car_marke_id, CarMarke.order(:name), :id, :name, :prompt => "--  Select Car Marke --" %>
  </div>
  <div class="field">
    <%= f.grouped_collection_select :car_model_id, CarMarke.order(:name), :car_models, :name, :id, :name, :prompt => "-- Select Model --"  %>
  </div>

W drugiej sekcji select zamiast wyswietlac mi odpowiednie modele wyswietla cale drzewo wraz z nazwami marki.

lass Post < ActiveRecord::Base
  attr_accessible :body, :title, :asset, :assets_attributes, :car_model_id, :car_marke_id
  has_many :assets, dependent: :destroy
  belongs_to :car_model
  belongs_to :car_marke
  accepts_nested_attributes_for :assets, allow_destroy: true

end
-------------
class CarModel < ActiveRecord::Base
   attr_accessible :name, :car_marke_id
   belongs_to :car_marke
   has_many :posts
   validates :name, :car_marke_id, presence: true
end
---------
class CarMarke < ActiveRecord::Base
  attr_accessible :name
  has_many :car_models
  has_many :post
end

Dzieki

OK, jakie jest pytanie/problem? Bo że nie zadziała (przynajmniej coffeescript), gdzie “options” będzie undefined to widać na pierwszy rzut oka.

Problem w tym ze nie dziala. Jestes pewien ze options bedzie niezdefiniowane? Oto podglad przetworzonego skryptu.

(function() {
  jQuery(function() {
    var car_marke, car_models, escaped_car_marke, options;
    car_models = $('#post_car_model_id').html();
    $('#post_car_marke_id').change(function() {});
    car_marke = $('#post_car_marke_id :selected').text();
    escaped_car_marke = car_marke.replace(/([ #;&,.+*~\':"!^$[\]()=>|\/@])/g, '\\$1');
    return options = $(car_models).filter("optgroup[label='" + escaped_car_marke + "']").html();
  });

  if (options) {
    $('#post_car_model_id').html(options);
  } else {
    $('#post_car_model_id').empty();
  }

}).call(this);

No tak, nie zadziała raczeh napewno. Masz funkcje uruchanianą przez jQuery podczas eventu onload, w niej ustawioną lokalną zmienną options. Tą zmienną zwracasz z funkcji. Ale zanim ta anonimowa fynkcja się wykona wogóle, to wykona się klauzula “if-else”. Gdzie ta zmienna nie byłaby widoczna nawet jeśli byś poprawił kolejność wykonania. Czy nie chcesz tej klauzuli przenieść prYpadkiem do ciała funkcji? Jeśli tak, to zrób wcięcie.

Tak o to chodzilo, o wciecia.
Dziekuje! teraz dziala