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 移动到一个咖啡脚本文件中,所以这不是我的问题。我真的只是想知道这是否看起来像一种类似 Rails 的方式来解决这个问题。

4

3 回答 3

2

“rails 方式”是在单独的文件中使用不显眼的 javascript,将您的 javascript 留在您的视野之外。乍一看,您的代码很好 - 只需将您的“脚本”内容移动到 .js 文件中。

于 2012-10-29T15:37:40.830 回答
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
            });
        })
    });
});
于 2012-10-29T15:37:15.860 回答
1

如果你问我认为你是什么..

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

这样就可以了。

于 2012-10-29T17:15:56.460 回答