0

リンクがクリックされたときにいくつかの機能を提供するプレーンHTMLがあります。これをクリーンアップして、Ruby/Railsコーディングスタイルに準拠した方法で処理されるようにします。私はヘルパーをいじってみlink_toましたが、この状況を処理するためのクリーンな方法を見つけることができませんでした。

<p>...or <a id="set_current_location" href="#">Use Current Location</a></p>

<script>
$(function(){
    $('#set_current_location').on('click', function(e){
        e.preventDefault();
        navigator.geolocation.getCurrentPosition(function(position) {
            $.ajax({
              type: 'POST',
              url: '<%= set_location_path %>',
              data: {
                latitude: position.coords.latitude,
                longitude: position.coords.longitude
              },
              async: false
            });
        })
    });
});
</script>

更新:私は実際にjavascriptをcoffeescriptファイルに移動したので、それは実際には私の質問ではありません。これがこの問題に取り組むためのレールのような方法のように見えるかどうか、私は本当に疑問に思っています。

4

3 に答える 3

2

「レールの方法」は、別のファイルで控えめなJavaScriptを使用して、JavaScriptをビューから除外することです。一見すると、コードは問題ありません。「スクリプト」を.jsファイルに移動するだけです。

于 2012-10-29T15:37:40.830 に答える
1

あなたが私があなたが何であると思うかを尋ねているなら..

<%= link_to "Use Current Location", "#", id: :set_current_location %>

それで終わりです。

于 2012-10-29T17:15:56.460 に答える
1

私が考えることができる唯一の方法は、この関数を呼び出すときにレールで生成されたパス(url)を渡すことです。私は使用し$(this).attr("href")ました。要素に属性hrefを作成します。このhref属性には、railsによって生成されたリンクが含まれます。

js.erbにはactionviewメソッドがありません

$(function(){
    $('#set_current_location').on('click', function(e){
        e.preventDefault();
        var url = $(this).attr('href');
        navigator.geolocation.getCurrentPosition(function(position) {
            $.ajax({
              type: 'POST',
              url: url,
              data: {
                latitude: position.coords.latitude,
                longitude: position.coords.longitude
              },
              async: false
            });
        })
    });
});
于 2012-10-29T15:37:15.860 に答える