2009-04-07 8 views
13

Ich benutze Schienen, aber machen alle meine Javascript unauffällig mit jQuery in application.js.Unauffällige jQuery-Autocomplete in Rails

Leider ist es sehr schwierig, URLs zu referenzieren. Zum Beispiel, wenn ich ein Feld Autocomplete-Verhalten geben möchte, muss ich die Autocomplete-URL in application.js fest codieren, da die Schienen url_for nicht verfügbar ist.

Ist es möglich, application.js verwenden erb? Denke ich darüber falsch?

Antwort

6

Sie könnten die URL zu einem Attribut im Formular- oder Formularfeld hinzufügen, wenn es Ihnen nichts ausmacht Markup, das den Validator nicht passieren kann, und dann dieses Attribut mit jQuery abzurufen.

Es sieht aus wie Rails 3.0 kann mit den JavaScript-Helfern mit HTML5 benutzerdefinierten Daten diesen Weg geht nach unten werden Attribute: DHH @ Railsconf 09

2

Ja, es ist möglich, auf aktuellen Schienen Versionen rufen Sie einfach Ihre Datei application.js.erb; Bei älteren Versionen können Sie entweder selbst rollen oder etwas wie this greifen.

+0

Cool! Ist das hier die beste Vorgehensweise? Verwenden Sie diese Methode? Es klingt gut für mich, aber ich bin immer noch nervös, ich arbeite gegen den Strich. –

+1

AFAIK, es hat es zu Schienen gemacht, weil so viele Leute es alleine gemacht haben. Es ist ein sehr häufiges Nutzungsmuster. Eine Einschränkung: Dies ist für das Injizieren von semi-statischen Dingen wie die Routen; Wenn sich die Inhalte innerhalb einer Sitzung ändern, senden Sie stattdessen das JavaScript in einem Ajax-Wrapper. – MarkusQ

+0

Eigentlich scheint das nicht zu funktionieren - muss ich die Datei aus/public/javascripts verschieben? Wenn ich die Datei umbenenne, erhalte ich einen Routing-Fehler, wenn mein Browser 'application.js' anfordert. –

2

Do not do application.js.erb, das ist keine gute Praxis, auch wenn Caching beteiligt ist. Damit wird der Endpunkt der Endverarbeitung (URL, von dem Sie die Daten erhalten) mit der URL der Aktion Ihres Formulars identisch. Fügen Sie in Ihre application.js einfach &ac=1 hinzu und lassen Sie Ihre Controller das verstehen.

1

Sie müssen es-- schaffen nicht hart codieren nur eine einzige JS-Funktion, die die automatische Vervollständigung ergänzt Zuhörer und nehmen Parameter für die automatische Vervollständigung, und nennt die JS-Funktion aus der Vorlage:

(Code zur Klarheit vereinfacht)

application.js:

function add_autocomplete(id, url) { 
    $("#" + id).autocomplete(
     source: url 
    ); 
}; 

application_helper.rb:

def add_autocomplete(id, url) 
    render :text => "<script> add_autocomplete('#{id}', '#{url}');</script>" 
end 

ERb Vorlage:

<input id="i_want_autocomplete" /> 
<%= add_autocomplete("i_want_autocomplete", items_js_path() %>