2016-01-21 100 views
0

我被困在一個任務中,不知道如何繼續前進。任何意見將不勝感激! (我對Javascript和jQuery非常陌生)。在rails應用程序中訪問Javascript變量

我正在執行在創建或編輯建築物期間在Google地圖上標記建築物的能力(兩者都是相同的形式)。

因此,我在.html.haml文件中的表單有兩個字段可以選擇一個國家和一個城市。只要沒有選擇國家,城市地區就會被禁用。這兩個字段保存國家和城市的ID(不是名字!)。

= select_tag 'building[country_id]', options_for_select(Country.all.map{|c| [c.name, c.id]), onchange: "getLocationObjects ($(this).val(), '#{cities_path}')" 

- if building.country 
    = select_tag 'building[city_id]', options_for_select(building.get_countries.cities.map{|c| [c.name, c.id]}, building.get_city.id), include_blank: "Choose city" 
- else 
    = select_tag 'building[city_id]', options_for_select([["Choose country", '']]), disabled: true 

但對於標記對谷歌地圖的建築物,我需要一個城市名稱,而不是ID(不說「然後將其保存在選擇標籤,而不是ID」,我需要在一個應用程序的其它部分的ID )。

所以我用一個jQuery保存城市的名稱:

:javascript 
    $(document).ready(function() { 
    $('#building_city_id').change(function() { 
     var option = $(this).find('option:selected').text(); 
     return option; 
    }); 
    }); 

這也正是第一個問題發生:當我編輯的建築已經有指定一個國家,一個jQuery函數保存城市名稱就好了。但是如果我從列表中選擇另一個國家,它就不再起作用了。

第二個問題:谷歌地圖的所有代碼位於.js文件中。那麼如何在這裏調用在.html.haml文件中創建的Javascript變量?

+0

讓我清楚解釋一下,https://chat.stackoverflow.com/rooms/101297/adhoc – beck03076

回答

0

我添加了一個空hidden_​​field_tag用於保存樓市:

= hidden_field_tag 'building[city_name]', '' 

,改變了jQuery函數來發送一個城市名作爲hidden_​​field_tag值:

1)如果已經指定了一個城市:

:javascript 
    $(document).ready(function() { 
    var option = $("#building_city_id option:selected").text(); 
    $('#building_city_name').val(option); 
    }); 

2)如果未指定城市:

:javascript 
    $(document).ready(function() { 
    $('#building_city_id').change(function() { 
     var option = $(this).find('option:selected').text(); 
     $('#building_city_name').val(option); 
    }); 
    }); 
1

您需要牢記這裏的架構:Rails/Ruby在服務器上生成一些文本文件,併發送給瀏覽器(客戶端)。瀏覽器可以評估它們,呈現html並執行javascript。

你可以寫入 JavaScript動態在Rails中,但它不會在那裏執行,所以你不能訪問變量。

同樣,瀏覽器中的JavaScript運行時環境對您的Rails應用程序一無所知。它可以與Rails進行的唯一通信是向服務器發送請求。

所以,如果你想要的JavaScript以「有國」選項和「沒有一個國家」選項中進行選擇,然後要麼

一)的選項全部套將需要出現在頁面上(但最初隱藏,除了國家選擇),並且javascript顯示/隱藏它們作爲適用

b)當第一組選項被選中時,javascript會對ajax調用rails以創建第二個下拉菜單,具體取決於在哪個國家被選中。

+0

謝謝Max。但有沒有辦法調用.js文件中的.html.haml文件中創建的Javascript變量? – Zelenka

+0

是的,你可以在你的haml文件中寫入JavaScript。直到它在瀏覽器中才會被執行,但是:雖然它在ruby中,但它只是一些文本。 –