it-swarm.com.de

Rails 4: Deaktivieren Sie Turbolinks auf einer bestimmten Seite

Ich versuche, ein JS-Snippet auf einer konkreten Seite mit Rails 4 und Turbolinks zu erstellen. Ich habe es mit der Standardlösung probiert:

<script type="text/javascript">

    var ready = function() {
        // Bla bla
    };

    $(document).ready(ready);
    $(document).on('page:load', ready);
</script>

Aber es scheint nicht zu funktionieren. Mein Ausschnitt ist ungefähr so:

<script type="text/javascript">
  function ismready() 
  {
    var API_KEY = "api key";
    var roomId  = "room id";
    var ism = new Ismuser(API_KEY, roomId);
    ism.init({
      board: {
        layer: "board"
      },
      video: {
        camsContainer: "guest"
      },
      chat: {
        layer: "chat"
      },
      moderator: true,
    });
  }
</script>
<script src="http://assets.ismuser.com/v0.4/js/ismuser.js" type="text/javascript"></script>

Das Snippet funktioniert nicht wie erwartet (selbst mit der Standardlösung) und zum Schluss möchte ich nur Turbolinks auf dieser Seite deaktivieren.

Wie kann ich es tun?

- Lösung

<% content_for :body do %>
    <% if controller.controller_name == 'home' && controller.action_name == 'demo1' %>
        <body data-no-turbolink="true">
    <% end %>
<% end %>
40
Rubén Jiménez

Fügen Sie “data-no-turbolink” to the <body> tag der Seite hinzu, auf der sie deaktiviert werden soll 

Wenn Sie über eine gemeinsam genutzte Layoutdatei verfügen, von der ich annehme, dass Sie dies tun, können Sie eine if -Anweisung ausführen und die Parameter [: Controller] und Params [: Action] überprüfen und sie nur einem Bereich hinzufügen

46
emcanes

Hier ist eine sauberere Lösung:

Ersetzen Sie in /app/views/layouts/application.html.erb das Tag <body> durch Folgendes:

<body 
  <% if content_for?(:body_attributes) %>
    <%= yield(:body_attributes) %> 
  <% end %>>

Wenn Sie nun die Turbolinks in einer bestimmten Ansicht deaktivieren möchten, z. /app/views/home/index.html.erb, Sie können dies der Datei hinzufügen:

für Schienen 4

  <% content_for(:body_attributes) do %>
    data-no-turbolink="true"
  <% end %>

und das wird am Ende als:

<body data-no-turbolink="true">

für Schienen 5

In Rails 5 unterscheidet sich die Syntax geringfügig:

  <% content_for(:body_attributes) do %>
    data-turbolinks="false"
  <% end %>

und das wird am Ende als:

<body data-turbolinks="false">
60
fearless_fool

Lösungen hier funktionierten nicht für mich, stellt sich heraus, dass Turbolinks die Syntax für das Deaktivieren von Turbolinks auf einer einzigen Seite in ihrer neuen Version (5.0.0) geändert hat.

Um es auf einer Seite mit Turbolinks 5.0.0+ zu deaktivieren, fügen Sie den Links der Seite, die Sie deaktivieren möchten, data-turbolinks="false" hinzu:

<a href="/link" data-turbolinks="false">Page without Turbolinks</a>

Es funktioniert auch für alle Vorfahren der Links. In diesem Beispiel führen beide Links zu nicht-verknüpften Seiten:

<div data-turbolinks="false">
  <a href="/link1">Page without Turbolinks</a>
  <a href="/link2">Another page without Turbolinks</a>
</div>

So aktivieren Sie es für einen einzelnen Link, wobei alle anderen Links in einem bestimmten Element deaktiviert sind:

<div data-turbolinks="false">
  <a href="/link1">Page without Turbolinks</a>
  <a href="/link2">Another page without Turbolinks</a>
  <a href="/link3" data-turbolinks="true">Page with Turbolinks enabled</a>
</div>

Ich habe auch versucht, es zum Text der Seite hinzuzufügen, auf der ich es deaktivieren möchte, ähnlich der alten Methode, jedoch mit data-turbolinks="false" anstelle von data-no-turbolink="true" - und das hat auch funktioniert!

Quelle: Turbolinks auf GitHub

14
Rani Kheir

Nur eine leicht modifizierte Version von fearless_fools Antwort, die aufgrund von Leerzeichen und Anführungszeichen merkwürdig gerendert wurde:

Anwendung.html.erb

<body <%= yield(:body_attributes) %>>

View.html.erb

<%= content_for(:body_attributes, 'data-no-turbolink') %>
11
Abram

Hier ist eine alternative Möglichkeit, dies zu codieren. Ich wähle einfach aus, welches Tag basierend auf dem Controller-Namen angezeigt werden soll.

    <html>
      <head></head>
      <% if controller.controller_name == 'subscriptions' %>
        <body data-no-turbolink>
      <% else %>
        <body >
      <% end %>

     Add the rest of my body here...

     </body>
   </html>
3
Coherent

Hier ist eine Lösung in Haml mit Rails 5.2.1

In Ihrem application.haml:

  %body{data: {turbolinks: (content_for :turbolinks)}}

In Ihrem template.haml:

- content_for :turbolinks {"false"}
1
Gerard Simpson

Für alle, die bereits Rails 5 verwenden. Wenn Sie den gesamten Turbolink für eine bestimmte Seite deaktivieren möchten, fügen Sie dem Hauptteil dieser Seite die Zeile "data-turbolinks = 'false" "hinzu:

<body data-turbolinks="false">
1
Peter Nguyen

Das hat funktioniert.

Wo immer der Link zu der Seite ist, machen Sie so etwas

  %div{"data-turbolinks" => "false"}
    = link_to 'Send payment', new_payments_manager_path(sender_id: current_user.id, receiver_id: @collaboration.with(current_user).id, collaboration_id: params[:id]), class: 'button'
0
joeyk16

Hier ist eine Lösung, die die Deaktivierung von Turbolinks auf der Seite deaktiviert, auf die ein Link verweist. In diesem Fall die Seite "Beitrag bearbeiten":

<%= link_to 'Edit', edit_post_path(@post), 'data-no-turbolink' => true %>
0
johnthekline