Я хотел запустить javascript для какой-то конкретной страницы.Для этого я создал метатег в файле макета следующим образом:
<%= tag :meta, name: :psj, action: action_name, controller: controller_name %>
Я также создал файл init.js
, который будет загружен файлом манифеста приложения.
# init.js
var Page, bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };
Page = (function() {
function Page() {
this.action = bind(this.action, this);
this.controller = bind(this.controller, this);
}
Page.prototype.controller = function() {
return $('meta[name=psj]').attr('controller');
};
Page.prototype.action = function() {
return $('meta[name=psj]').attr('action');
};
return Page;
})();
this.page = new Page;
Вот мой файл javascript для конкретного контроллера, который должен запускаться с определенным действием:
# scans.js
$(document).on('turbolinks:load', function() {
if (!(page.controller() === 'scans' && page.action() === 'index')) { return; }
var ajax_call = function() {
$.get("/scans.js", { }, function(table) {
$("#scans").replaceWith(table);
});
}
var interval = 1000 * 60 * 1 ;
setInterval(ajax_call, interval);
});
Это прекрасно работает для страницы scans#index
.Теперь после посещения этой страницы, если я нажму на любую ссылку, которая загружает некоторую другую страницу в том же окне, , ajax_call
запускается код, который не должен иметь место.
Наоборот, если я открываюэта другая страница в другом окне работает нормально (ajax_call
не запускается).Это как-то связано с кешем браузера или кеша турболинков, не знаю, в чем причина проблемы.