我有一些普通的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文件中,因此这并不是我的问题。我真的只是想知道这看起来像是一种像铁轨一样解决这个问题的方法。
" Rails Way"将在单独的文件中使用Unbroustrusive JavaScript将您的JavaScript从视图中排除。乍一看,您的代码很好 - 只需将您的"脚本"内容移动到.js文件中。
如果您问我认为自己是什么..
<%= link_to "Use Current Location", "#", id: :set_current_location %>
那会做。
我能想到的唯一方法是调用此功能时通过导轨生成的路径(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
});
})
});
});