2016-07-20 15 views
1

In meiner HTML-Seite muss ich jquery zweimal setzen. Wenn ich jemanden aus meiner Seite herausnehme, wird die Seite nicht gerendert. Bitte beachten Sie, dass beide enthaltenen "jquery" auf den gleichen Ort zeigen.Warum muss ich jquery zweimal laden

Ich benutze backbone.js. Ich habe require.js hinzugefügt, um jquery am Ende der Seite einzubinden. Außerdem muss ich jquery am Anfang der Seite hinzufügen. Sobald ich diese beiden hinzugefügt habe, wird meine ganze Seite richtig gerendert. Wenn ich etwas davon nehme, bekomme ich Probleme.

Kann jemand etwas Licht auf, warum dieses Problem geschieht.

Script hinzugefügt im HEAD Tag der Seite:

<script src="../vendors/jquery/dist/jquery.min.js"></script> 

Script in BODY unten hinzugefügt:

<script type="text/javascript"> 
require(['common'],function() 
{ 
    require(['jquery', 'fastclick','nprogress','charts','underscore'],function() 
    { 
    require(['firstDashboardController']); 
    }); 
}); 
</script> 

Wenn ich die Jquery am oberen Rand der Seite auch weiter unten nehmen ist der Fehler, den ich bekomme:

enter image description here

Wenn ich die Jquery nehme an der Unterseite aus erfordern Modul, dann unten ist der Fehler:

enter image description here

PS: Ich bin chart.js eine externe Datei mit Graphen und Sachen ziehen auf Die Seite.

+0

Fügen Sie Ihre Script-Tags innerhalb der HEAD- oder BODY-Tags ein? – TetonDan

+0

Intiale jquery im Kopf. die erfordern einen im Körper an der Unterseite. – Unbreakable

+0

@TetonDan bitte helfen .. – Unbreakable

Antwort

1

Eine gemeinsame Lösung für dieses Problem jQuery zu verwenden, wäre eingebaute in $.noConflict(true) aber ich würde vorschlagen, dass Sie die folgenden verwenden

requirejs.config({ 
    paths: { 
     jquery: '../vendors/jquery/dist/jquery.min.js' 
    } 
    }); 

    if (typeof jQuery === 'function') { 
    //jQuery already loaded, just use that 
    define('jquery', function() { return jQuery; }); 
    } 

    require(["jquery"], function($) { 
    //This $ should be from the first jquery tag, and no 
    //double load. 
    }); 

Quelle: in Ihrem unteren <script> Tag-Code die Doppelbelastung von jQuery gänzlich zu verhindern https://github.com/requirejs/requirejs/issues/535

loswerden von einem umfassen wird, weil nicht:

  1. Sie jQuery muss vor der Bootstrap geladen wird (1. <script> tag)
  2. Das Modul ist auch mit RequireJS geladen nicht direkt jQuery verwenden kann, das über einen <script src="jQuery.min.js"> Tag (unten tag) geladen wird
+0

Perfekt gearbeitet. Vielen herzlichen Dank. – Unbreakable

1

jQuery registriert sich selbst mit den globalen Funktionen "$" und "jQuery", auch wenn es mit RequireJS verwendet wird. Wenn Sie dieses Verhalten deaktivieren möchten Sie noConflict Funktion aufrufen haben, müssen Sie möglicherweise zu

define('jquery-require', ['jquery'], function (jq) { 
    return jq.noConflict(true); 
}); 

require(['jquery-require'], function(jq) { 
    console.log(jq);  // working 
    console.log($);  // undefined 
    console.log(jQuery); // undefined 
});