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