2017-01-12 54 views
0

我目前有一个使用Turbolink的Rails应用程序。在这个应用程序中,我试图追踪在特定视图上花费的时间。我已经看过无数的问题,并通过名为window.onbeforeunload,window.beforeunload,window.on(“beforeunload”)的多个变型了......我现在的尝试是这样的:Rails w/Turbolinks window.onbeforeunload

$(document).ready(function() { 

var start = Date.now(); 

var id = gon.subjId; 
var rand_index = gon.randIndex; 
var index = gon.index; 

console.log('showing article ' + index + ' at index ' + rand_index + ' for ' + id); 

$(document).on('turbolinks:before-change', function() { 
    $.post('/log', {subj_id: id, article: {index: index, rand_index: rand_index, time_spent: Date.now()-start}}, 
    function(response) { 
    }); 
}) 

});

我知道使用AJAX请求的函数有效;但是,它不叫。如何在后退按钮被按下时调用此函数?

+0

我认为Rails的5改变了turbolinks'事件的命名空间'turbolinks'而不是'页面'尝试使用'turbolinks:before-change' – ErvalhouS

+0

我试过并更新了这个问题,但它仍然不起作用 – genghiskhan

+0

'turbolinks:load'now有一个'event.data.timing',不是它是你期待看到的日期?请参阅此[链接](https://github.com/turbolinks/turbolinks#full-list-of-events) – ErvalhouS

回答

0

我仍然不知道什么是根本错误是,但我改变了脚本这一点,就像一个魅力:

$(document).ready(function() { 
var start = Date.now(); 

var id = gon.subjId; 
var rand_index = gon.randIndex; 
var index = gon.index; 

console.log('showing article ' + index + ' at index ' + rand_index + ' for ' + id); 

function logVisit() { 
    console.log('logging visit'); 

    $.post('/log', {subj_id: id, article: {index: index, rand_index: rand_index, time_spent: Date.now()-start}}, 
    function(response) { 
    }); 
    document.removeEventListener('turbolinks:before-cache', logVisit); 
} 

document.addEventListener('turbolinks:before-cache', logVisit); 
});