Как загрузить JS только на одной странице моего приложения - PullRequest
0 голосов
/ 10 февраля 2019

Я пытаюсь загрузить файл js на одну страницу моего приложения.Но он вызывается во всем, и это приводит к возникновению ошибок на моем экране.

Мой application.js:

//= require jquery
//= require rails-ujs
//= require activestorage
//= require turbolinks
//= require_tree .

Мой application.html.erb

<!DOCTYPE html>
<html>
  <head>
    <title>Netshow</title>
    <%= csrf_meta_tags %>
    <%= csp_meta_tag %>

    <%= stylesheet_link_tag    'application', media: 'all', 'data-turbolinks-track': 'reload' %>
    <%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>

  </head>

  <body>
    <div class='cover-container d-flex w-100 h-100 p-3 mx-auto flex-column'>
      <header class='masthead mb-auto'>
        <%= render 'shared/navbar' %>
      </header>
      <%= yield %>
      <footer class='mastfoot mt-auto'>
        <%= render 'shared/footer' %>
      </footer>
    </div>
  </body>
</html>

Мой js-файл:

$(document).on("turbolinks:load", function() {
  console.log('teste')
  var player = videojs('my_video_1');

  var options = {};

  player.on('play', function() {
    $.ajax({
      type: 'POST',
      url:"/video_clicks/",
      dataType: 'json',
      data: {
        video_click: { video_id: window.location.pathname.split('/')[2] }
      },
      success: function(){
        $('span.video-count')[0].innerText = parseInt($('span.video-count')[0].innerText) + 1
      }
    });
  });

  function showCount(){
    var id = window.location.pathname.split('/')[2] 
    $.ajax({
      type: 'GET',
      url:"/video_clicks/"+id,
      dataType: 'json',
      success: function(data){
        console.log($('span.video-count')[0])
        $('span.video-count')[0].innerText = data
      }
    });
  }

  showCount()
});

Я хотел бы загрузить js-файл только на одной странице моего приложения, а не на всех.Как я могу это сделать?Я уже пытался удалить require_tree add content в application.html.erb и установить содержимое в моем html-файле, но rails говорит, что мне нужно добавить файл в assets.erb для предварительной компиляции, и когда я делаю это, другие страницы перезагружаютсямой файл js.

Ответы [ 3 ]

0 голосов
/ 10 февраля 2019

Вы просто включаете эту страницу (файл erb) с <%= javascript_include_tag 'js_file_name' %>

0 голосов
/ 10 февраля 2019

Добавьте к вашему просмотру и

<%= javascript_include_tag 'js_file_name' %>

config / initializers / assets.rb

Rails.application.config.assets.precompile += %w(js_file_name.js)
0 голосов
/ 10 февраля 2019

У вас есть несколько вариантов в этом сценарии:

  1. Вы можете проверить params[:controller] и params[:action] в application.html.erb , если это соответствует конкретной страницеКонтроллер + действие, а затем только загрузить JS.(Лучшее решение)

Как:

<% if params[:controller] == 'your_controller_name' && params[:action] == 'your_action_name' %>
  <%= render partial: 'shared/custom_js' %>
<% end %>

На основе этого кода выше, я создам новый файл с именем custom_js.html.erb в моих представлениях> общий доступ папка.Затем напишите скрипт в этом файле внутри тега <script></script>.Кроме того, вам необходимо удалить этот файл скрипта из файла application.js.

Вы можете создать другой макет для этого конкретного метода доступа к странице.Как и ответ здесь .
...