Document.ready dans des fichiers externes?
Je suis référencement JavaScript sur une page HTML:
<script type="text/javascript" src="http://code.jquery.com/jquery-1.6.1.min.js"></script>
<script type="text/javascript" src="http://code.jquery.com/mobile/1.0b1/jquery.mobile-1.0b1.min.js"></script>
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false&region=GB"></script>
<script type="text/javascript" src="js/shared.js"></script>
<script type="text/javascript">
$('document').ready(function() {
//In-page code: call some functions in shared.js
});
</script>
Les fonctions définies dans shared.js ne sont pas enveloppés à l'intérieur $('document').ready
. Donc:
- Il est sûr de supposer que les fonctions définies dans les
shared.js
sont disponibles pour le code de la page"? - Si je sors le code de la page dans un fichier séparé appelé
local.js
(garder enveloppé dans$('document').ready
), est-il encore raisonnable de supposer que les fonctions définies dans lesshared.js
sont disponibles? - Enfin, est le fait que je ne suis pas d'emballage shared.js à l'intérieur de
$('document').ready
un problème? Je suis la recherche que si je ne l'envelopper, ses fonctions ne sont plus disponibles pour le code de la page.
La raison pour la question 3, c'est que je suis frapper ce problème: Uncaught TypeError: Propriété ... ce n'est pas une fonction - une fois que la page est chargée
et vous demandez-vous si c'est quelque chose à voir avec la façon dont j'ai organisé mon code.
Mise à JOUR: Merci pour les réponses. Il est maintenant clair que l'utilisation d' $('document').ready
dans shared.js serait de supprimer ces fonctions à partir de portée mondiale. Cependant, je veux juste clarifier la question d'origine au point 3.
Puis-je suppose que si je ne les suivants:
- à l'intérieur de mon en-page de code, chargé à l'intérieur
$('document').ready
appeler une fonction d'shared.js - ont la fonction dans shared.js reportez-vous à jQuery, Google Maps, ou des éléments sur ma page
il n'y aura pas de problèmes?
En d'autres termes, il est sûr de supposer que la page s'est ouverte par le temps, les fonctions à l'intérieur de shared.js
sont appelés, même si je ne suis pas d'emballage tout dans ce fichier à l'intérieur de $('document').ready
?
source d'informationauteur Richard
Vous devez vous connecter pour publier un commentaire.
Oui, tant Que ces fonctions sont injectés dans la portée globale
Oui, tant Que
local.js
est inclus aprèsshared.js
ET shared.js injecte des fonctions dans la portée globale.Fonctions d'habillage dans
document.ready
les emmène hors de portée mondiale.Vous avez besoin d'injecter des variables dans la portée globale, c'est aussi facile que de faire ce
function foo(){}
vous newindow.foo = function(){};
.Tout ceci est hors de propos cependant, parce que vous avez besoin soit d'un dom prêt auditeur ou pas - en fonction de si oui ou non vous essayez d'accéder au dom dans le code. Si oui, puis l'envelopper, si pas, alors ne le faites pas. Comme mentionné, vous pouvez fermer votre code afin de ne pas polluer l'espace de noms global, ou de polluer si vous le désirez.
Il est sûr de supposer (si les définitions ne sont pas cachés à l'intérieur, une fermeture qui ne sont pas accessibles).
Il faudra encore travailler, juste incorporer
local.js
aprèsshared.js
Il n'a pas de travail, parce que les fonctions ont été enveloppés dans un dispositif de fermeture (celui qui sera exécuté sur domready), de sorte qu'ils ne sont disponibles à l'intérieur fermeture
Aussi, il est inutile de mettre des définitions de fonction dans
$(document).ready()
. La partie qui compte, c'est quand vous appel ces fonctions, qui doivent être à l'intérieur.ready()
(bien, s'il s'agit DOM trucs ou tout ce qui doit être fait après le chargement de la page).Si vous enveloppez de votre fonction à l'intérieur du document.prêt de ces fonctions ne sont pas disponibles dans le contexte global, en fonction ont une portée locale (I. E à l'intérieur de la fonction où elles sont contenues)
Votre code d'organisation est très bien présenté. Toutes les fonctions définies dans les "shared.js" sera disponible pour le reste de votre page, y compris votre
$('document').ready(function()
bloc.Toutefois, si vous placez les fonctions dans shared.js dans que bloc, vous pouvez limiter la portée du code de la
$('document').ready(function()
(c'est à dire rien d'autre dans la page peut l'utiliser) -- ce n'est donc pas la voie à suivre si vous voulez faire des trucs en "shared.js" à la disposition des autres parties de votre code /de l'application.