2016-07-22 19 views
1

Ich benutze die JQuery.UI Datepicker, aber mehrere Änderungen, die angewendet werden müssen, die das Plug-in Widget aktualisieren, bevor es tatsächlich in meiner Web-App verwendet werden kann. Zum Testen lade ich einfach JQuery und die Datepicker-Bibliotheken mit den normalen Tags, gebe dann den modifizierenden Code in ein eigenes Tag ein und lege schließlich das Tag für den Datepicker und den Initialisierungscode in ein weiteres Tag ein. Das alles funktioniert, wenn nur eine Seite den geänderten Datumszeiger verwendet.einschließlich Javascript in einem anderen enthalten Javascript

Jetzt möchte ich beginnen, modifizierte Daten auf mehreren Seiten zu verwenden, und ich möchte nicht alle Änderungen für den Datepicker an jeder Stelle beibehalten müssen, wo ich es verwende. Was ich tun möchte, ist eine Wrapper-Datei für den Datepicker zu erstellen, die den modifizierenden Code und die Includes enthält, die für die Verwendung von Datepicker benötigt werden. In den Seiten, die einen Datepicker verwenden, würde ich einfach die Wrapper-Skriptdatei einfügen.

Dies alles läuft darauf hinaus, eine Javascript-Datei in eine andere eingeschlossene Javascript-Datei aufzunehmen.

Ich weiß, dass dies ein Duplikat von einigen der anderen Fragen ist, aber wenn ich die vorgeschlagenen Korrekturen in diesen anderen Fragen, wie dem document.write und den JQuery addScript-Techniken, versuchten, scheinen sie nicht zu funktionieren für mich in Chrome. Das erste Problem, mit dem ich konfrontiert bin, ist, dass die addScript-Funktion mir sagt, dass es ein tiefes Problem in der JQuery-Bibliothek gibt, die normalerweise mit einem Tag in der Hauptdatei geladen wird. Wenn ich das addScript auskommentiere, tritt der Fehler nicht auf. Die document.write-Methode scheint zu laufen, aber keiner der Datepicker funktioniert.

Ich würde gerne wissen, wie das Skript am besten mit einem anderen Skript geladen wird, damit ich meinen Wrapper erstellen kann und die Lösung in allen gängigen Browsern funktionieren muss.

Die Falte in all dem ist, dass der Prozess an Seiten mit PHP + Ajax angepasst werden kann, aber ich möchte zuerst eine reine HTML + Javascript + JQuery + JQuery.UI Datepicker Lösung arbeiten.

Wenn dies bereits beantwortet wurde, und arbeitet mit den Einschränkungen, die ich hier umrissen habe, bitte zeigen Sie mir auf diese Lösung, bitte sagen Sie nicht einfach "doppelte Frage" und lassen Sie es dabei. Ich habe die Lösungen in diesem Forum und andere überprüft und viele einfache und komplexere Lösungen gesehen, die einfach nicht funktionieren oder Fehler verursachen.

Es wäre wirklich, wirklich, schön, wenn Tag unterstützt verschachtelte Includes, dies alles wäre viel einfacher, und mit diesem Konzept, um Wrapper zu isolieren Überschreibungen auf die Basisbibliothek Objekte zu unterstützen, was Objekte sind alles über. So ist eine robuste, Cross-Browser-Technik, die die und CSS-Includes wirklich unterstützt, überfällig. Wenn es da draußen ist, dann habe ich es verpasst, aber nach dem, was ich gesehen habe, ist es nicht in einer Art, bereit für die Primetime '.

Danke, Howard Brown

+0

Warum nicht in eine Datei zu kopieren? –

+0

Warum müssen Sie es später laden? –

+0

was meinst du mit ** einschließlich einer Javascript-Datei in einer anderen eingeschlossenen Javascript-Datei ** – madalinivascu

Antwort

0

I ur werde wie mein Vorschlag sehr bezweifeln, aber ima finden es gehen sowieso

eine Datei includes.php

alle genannt erstellen, das Zeug in THT-Datei setzen

Verwendung

<? include("includes.php"); ?>

wo

diese Weise benötigt Sie alle Ihre Skripte in einer Datei setzen können und haben sie in so viele Seiten enthalten, wie u mit einem einfachen Code-Zeile wollen

+0

Es wäre noch effizienter, dies einmal zu tun und die geglättete und optional minimierte Datei zwischenzuspeichern. – GolezTrol

+0

warum der downvote lol dies ist eine absolut gültige antwort nicht die optimale vielleicht aber immer noch gültig in der praxis ive gesehen verschiedene websites, engines, frameworks ... mit dieser methode –

+0

Joseph Flames - Ich mag diese eine die beste, und würde nicht t es abstimmen. Stattdessen würde ich es ablehnen, aber ich habe keinen Vertreter dafür. Es ist einfach und macht genau das, was ich versuche zu tun! Da ich PHP verwende, werde ich dies implementieren. Ihre andere Lösung kann in Nicht-PHP-Fällen immer noch nützlich sein, also muss ich es noch ausprobieren. :) –

-1

Sie könnten ein git System lokales Repository mit verwenden Ihre Änderungen, damit Sie bei Bedarf etwas zusammenführen können. Das würde ich vorschlagen. Verzweigen Sie den ursprünglichen Zweig und fügen Sie dann Ihre Änderungen hinzu. Dies wird auch als Patch-Datei bezeichnet.

+0

Das ist schwer zu pflegen, und Dinge können leicht brechen, wenn Sie eine Bibliothek aktualisieren möchten. – GolezTrol

+0

Warum würde ich dafür ablehnen?Es ist eine gültige Lösung eine echte Lösung ist vielleicht nicht für Sie, aber es ist eine Lösung und was die meisten Menschen tatsächlich tun würden. oder sie würden die gewünschten Änderungen dem ursprünglichen Ersteller übermitteln. – JQluv

+0

JQluv - Danke für das Einspielen. Ich hätte es nicht abgelehnt, da es ein sehr guter Weg ist, um die Code-Basis zu erhalten. Ich denke jedoch, das ist das Gleiche, als würde man den gesamten Datepicker-Code in der Wrapper-Skriptdatei zusammenfassen - einfach zu erledigen, weniger klar zu verwalten. Ich denke, die +1000 Zeilen von datepickers Bibliothekscode in die gleiche Datei mit dem ganzen Patch-Code zu gießen, würde das Verständnis der ganzen Sache erschweren und aufrechterhalten. Die Bibliothek von den Patches getrennt zu halten, hilft dabei, alles übersichtlich und modular zu halten. Unterschiedliche Dateien für jeden der Patches können überkillt sein. –

3

haben Sie so etwas versucht?

var Loader = function() { } 
Loader.prototype = { 
    require: function (scripts, callback) { 
     this.loadCount  = 0; 
     this.totalRequired = scripts.length; 
     this.callback  = callback; 

     for (var i = 0; i < scripts.length; i++) { 
      this.writeScript(scripts[i]); 
     } 
    }, 
    loaded: function (evt) { 
     this.loadCount++; 

     if (this.loadCount == this.totalRequired && typeof this.callback == 'function') this.callback.call(); 
    }, 
    writeScript: function (src) { 
     var self = this; 
     var s = document.createElement('script'); 
     s.type = "text/javascript"; 
     s.async = true; 
     s.src = src; 
     s.addEventListener('load', function (e) { self.loaded(e); }, false); 
     var head = document.getElementsByTagName('head')[0]; 
     head.appendChild(s); 
    } 
} 

Nutzung

var l = new Loader(); 
l.require([ 
    "example-script-1.js", 
    "example-script-2.js"], 
    function() { 
     // Callback 
     console.log('All Scripts Loaded'); 
    }); 

Sie könnten möglicherweise Nest so viele enthält, wie Sie (in seiner jeweiligen Rückruf jedes) wollen, und sie funktionieren würde alles noch.

Credit CSS Tricks für die Lösung

+0

während das ist absolut lebensfähig und eigentlich ziemlich genial wäre dies viel mühsamer als die bereits vorgeschlagenen Lösungen –

+0

Dies ist wirklich eine einzigartige Lösung! Ich sehe Ihre Anerkennung für CSS-Tricks, so dass es mir scheint, dass ich dadurch auch die beiden CSS-Dateien laden kann, die ich auf jeder Seite brauche, die Datumsauswahl verwendet. Interessant. Wie zu anderen Methoden, das gleiche zu tun. Die, auf die ich mich anfangs bezog, funktionierten nicht, entweder funktionierte der Datapicker überhaupt nicht oder Skriptfehler wurden gemeldet. –

+0

Continuing - Von den neuen Vorschlägen habe ich bereits oben kommentiert, aber bis jetzt, abgesehen von Ihrem sind sie nicht meine Bedürfnisse erfüllen oder würde unordentlich im Fall der Kombination des Codes in einem