2016-07-02 10 views
0

Eigentlich möchte ich Javascript-Code in meine Rails-Anwendung ausführen.Implementieren zeigen/verbergen Funktionalität mit Javascript in Rails-Anwendung

Ich habe eine neue Datei erstellt, die custom.js in "app/assets/javascripts" ist.

custom.js

$(document).ready(function() { 
    $("div#test").hide(); 
    $("a").click(function(event) { 
     event.preventDefault(); 
     $("div#test").fadeToggle(); 
    }); 
}); 

Ich habe auch, // = custom in application.js Datei benötigt aber immer noch der Code nicht gleich am Anfang verstecken.

application.js

// This is a manifest file that'll be compiled into application.js, which will include all the files 
// listed below. 
// 
// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts, 
// or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path. 
// 
// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the 
// compiled file. 
// 
// Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details 
// about supported directives. 
// 
//= require jquery 
//= require jquery_ujs 
//= require turbolinks 
//= require bootstrap-sprockets 
//= require nicetitle 
//= require custom 

index.html.erb

<a href="#" class="toggle-formed" style="float: right;" >Search</a> 

       <div id="sample" class="<%= @xvaziris_data.present? ? 'hidden' : '' %>"> 

        <%= form_tag xvaziris_path, method: 'get', class: "form-group", role: "search" do %> 
        <p> 
         <center><%= text_field_tag :search, params[:search], placeholder: "Search for.....", class: "form-control-search" %> 
          <%= submit_tag "Search", name: nil, class: "btn btn-md btn-primary" %></center> 
         </p> 
         <% end %><br> 

         <% if @xvaziris.empty? %> 

         <center><p><em>No results found for.</em></p></center>    

         <% end %> 

        </div> 

general.scss

.hidden { 
    display: none; 
} 

Die oben custom.js Code, wenn ich in index.html platzieren .erb unter JavaScript Script-Tag funktioniert es gut. Aber ich möchte mich nicht in jedem anderen Controller/Index wiederholen, da die Rails dem DRY-Prinzip folgen, das sich NICHT WIEDERHOLT.

Search.js

$(document).on('page:change', function() { 
     $("div#sample").hide(); 

    // | === HERE 
    $("a.toggle-formed").click(function(event) { 
     event.preventDefault(); 
     $("div#sample").fadeToggle(); 
    }); 
}); 

Irgendwelche Vorschläge sind herzlich willkommen.

Vielen Dank im Voraus.

+0

Ihre custom.js ist in Ihrer Seite verfügbar, wenn Sie application.js einlegen – uzaif

+0

Danke für die Antwort. custom.js-Dateien befinden sich unter "app/assets/javascripts" und sind eine separate Datei. –

+0

ja, aber es muss in '

0

mehr @Joe's answer Hinzufügen:

Also, wenn Sie für die Suche implementieren, müssen Sie es so machen kann:

Fügen Sie eine Klasse hidden in Ihrem CSS in der Klasse schreiben:

.hidden { 
    display: none; 
} 

Wenn also beim Laden der Seite überprüft wird, ob die Suchdaten vorhanden sind, fügen Sie keine Klasse hidden hinzu oder fügen Sie sie hinzu. Beispiel:

<div id="test" class="<%= search_data.present? ? 'hidden' : '' %>"> 

So wird dies angezeigt, wenn die Suchdaten vorhanden sind.

Hoffe, das hilft.

+0

Danke für die Antwort. Aber ich bekomme diesen Fehler undefiniert lokale Variable oder Methode 'search_data 'für # <# : 0x00000009240dc0> –

+0

Der' Such_Daten' Name war nur ein Beispiel, bitte ersetzen Sie ihn durch die Instanzvariable, in der Sie die haben Daten von Ihrem Controller. – Deep

+0

Danke. Ich füge search.js als Referenz hinzu. Braucht es irgendwelche Änderungen? Erneut schaltet er sich zurück, wenn ich auf die Suche klicke ... –

Verwandte Themen