9 Stimmen

JQuery in CodeIgniter, innerhalb der Ansicht oder in externer js-Datei?

Ich entwickle eine Webanwendung mit CodeIgniter. Die ganze Zeit über habe ich den benutzerdefinierten JS-Code im Ansichtsdatei platziert, um coole Sachen zu machen. Dadurch kann ich die von CodeIgniter bereitgestellte site_url() und base_url() Funktion verwenden.

Heute möchte ich den benutzerdefinierten JS-Code aus der Ansichtsdatei in eine externe JS-Datei auslagern. Dann ist mir klar geworden, dass ich site_url() und base_url() in der externen JS-Datei nicht verwenden kann. Also musste ich den JS-Code wieder in die Ansichtsdatei verschieben.

Ich möchte Meinungen, Beispiele und bewährte Praktiken für solche Probleme erfahren. Legst du den benutzerdefinierten JS-Code in die Ansicht oder in eine externe JS-Datei? Wenn du es in einer externen Datei platzierst, wie gehst du mit der Notwendigkeit von site_url() und base_url() um (abgesehen davon, dass du die absolute URL eingibst, die ich vermeiden möchte).

38voto

Sampson Punkte 258265

Normalerweise halte ich meine in einer externen Datei, platziere jedoch eine einzige Zeile innerhalb meines Templates (Ansicht), die eine Javascript-Variable namens "baseurl" deklariert, die später von meinem externen Javascript verwendet werden kann.

  var baseurl = "<?php print base_url(); ?>";

Jetzt hat meine scripts.js Datei Zugriff auf den base_url()-Wert über seine eigene baseurl-Variable.

3voto

Jens Roland Punkte 26963

Ich würde es auf eine andere Art machen - js sollte offensichtlich extern sein, aber warum nicht die volle Funktionalität des MVC-Frameworks nutzen, das perfekt geeignet ist, um all deine JavaScript-Magie zu handhaben?

Hier ist mein Rezept für JavaScript- (und CSS-) Perfektion mit CI:

  1. Greife eine Kopie von Minify ab - falls du es noch nicht kennst, wird dein Leben besser sein. Nicht auf eine "Liebe auf den ersten Blick / Ich habe gerade jQuery / xkcd / Unittesting entdeckt" Art, aber zumindest auf eine "Mann, vorbereitete Anweisungen verhindern SQL-Injection" Art.

  2. Zweitens, erstelle einen CI-Controller, der Minify umschließt (sollte nicht zu schwer sein, denke daran, den richtigen HTTP-Header zu setzen und die Parameter zu übergeben)

  3. Aktiviere optional das Caching, um alles blitzschnell ablaufen zu lassen (Minify hat Caching integriert, aber wenn du bereits den CI-Inhalt cachen, könntest du hier genauso gut die gleiche Methode verwenden.

  4. Definiere optional einige Gruppen für Minify, um das Skriptladen noch angenehmer zu gestalten

  5. Füge optional die baseurl- und siteurl-Variablen (und alle anderen Werte, die du benötigst) zur JavaScript-Ausgabe hinzu

  6. Und voilà, du solltest jetzt in der Lage sein, deine Skripte durch Aufrufen des Minify-Wrapper zu laden:

Es ist wahnsinnig schnell, es ist komprimiert, es erfordert nur eine Anfrage anstelle von vielen, es gibt dir volle CI-Kontrolle über deine Skripte und es macht sogar deinen Quellcode sauberer.


Oh, und wenn du deinen Quellcode-gierigen Besuchern etwas Gutes tun möchtest, könntest du automatisch so etwas wie dies zur Ausgabe hinzufügen:

// JavaScript komprimiert mit Minify von Ryan Grove und Steve Clay
// (http://code.google.com/p/minify/)
// Menschlich lesbare Quelldateien:

// http://www.yourdomain.com/js/core_functions.js
// http://www.yourdomain.com/js/interface.js
// http://www.yourdomain.com/js/newsticker.js
// http://www.yourdomain.com/js/more_magic.js

(...)

Zumindest ist das, was ich mache.

0voto

Phil Sturgeon Punkte 30202

Donny, wenn du jeden URL einzeln durchläufst, wirst du dir nur Kopfschmerzen bereiten. Warum nicht einfach base_url() durchlaufen lassen und den Controller / die Methode am Ende anhängen?

Sie verlieren die Möglichkeit, index_page- und url_suffix-Einstellungen zu tauschen, aber sie sollten sich sowieso nicht allzu oft ändern.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X