“Rails方式”应用javascript链接

时间:2012-10-29 15:33:00

标签: javascript ruby-on-rails ruby

我有一些简单的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文件中,因此这不是我的问题。我真的只是想知道这是否像一个类似铁路的方式来解决这个问题。

3 个答案:

答案 0 :(得分:2)

“rails way”将使用不显眼的javascript在单独的文件中保留您的javascript。乍一看,您的代码很好 - 只需将您的“脚本”内容移动到.js文件中即可。

答案 1 :(得分:1)

我能想到的唯一方法是在调用此函数时传递rails生成的路径(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
            });
        })
    });
});

答案 2 :(得分:1)

如果你问的是我认为你是谁..

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

那就行了。