2009-11-24 4 views
1

Cela pourrait être plus d'un débat philosophique, mais voici ce que j'ai:dépendances de fichiers Javascript - fichiers de ressources de charge sélective et éviter les doublons

  • Deux contrôles qui partagent une bibliothèque de ressources Javascript pour appeler un webservice.
  • Ils sont généralement utilisés conjointement, mais pas toujours.
  • Le fichier javacsript auquel ils font référence n'est pas facilement séparable.
  • Le fichier javascript ne doit pas être ajouté à chaque page de l'application.

Idéalement, je diviserais le service Web entre les contrôles et j'appellerais chacun un fichier de ressources js ciblé uniquement sur les fonctions dont ils ont besoin.

Je me demande s'il y a une meilleure façon évidente que je me manque ...

Dans sa forme la plus simple que j'ai:

<html> 
<head> 
</head> 
<div> 
    <h1>Control1</h1> 
    <script type="text/javascript" src="/Webservice.asmx/js"></script> 
</div> 
<div> 
    <h1>Other stuff</h1> 
</div> 
<div> 
    <h1>Control2</h1> 
    <script type="text/javascript" src="/Webservice.asmx/js"></script> 
</div> 
</body> 
</html> 

Modifier
je jQuery disponible à moi si cela fournit une méthode utile.

En utilisant ASP.NET

+0

Qu'est-ce que les scripts côté serveur que vous utilisez? par exemple. php, jsp etc? –

Répondre

1

résolu mon problème avec le suivant JS & Code jQuery

if (thisResourceLoaded === undefined) 
{ 
    $.getScript('/Webservice.asmx/js'); 
    var thisResourceLoaded = true; 
} 
+0

Ça va le faire. J'allais suggérer 'dojo.require' si vous n'utilisiez pas jquery. –

+0

Je pense qu'il est impoli pour moi de l'éditer simplement mais, je crois que la vérification correcte pour undefined utilise l'opérateur typeof 'if (typeof (thisResourceLoaded) ===" undefined ") {..' – metaomniliquant

1

Si ces contrôles ne ont pas besoin de partager des informations entre eux, vous pouvez consulter la méthode de jQuery d'utiliser des objets, Wich assure que si vous nommez différemment l'objet principal, il instancier (pas sûr si ce mot existe) 2 variables renvoyant le même objet.

1

L'approche la plus simple consiste à inclure la bibliothèque de ressources js entière une fois lorsque vous utilisez l'un des contrôles ou les deux. Cela doit être géré par votre script côté serveur (php etc.)

Stockez < script src = ".." > balayez vers la partie tête de la page. Lorsque vous ajoutez un nouveau contrôle à la page, vérifiez si la partie principale contient déjà la bibliothèque requise, sinon, ajoutez la bibliothèque. Ne pas inclure la même librairie plus d'une fois par page, si possible.

Par exemple:

<html> 
    <head> 
    <script type="text/javascript" src="/Webservice.asmx/js" /> 
    </head> 
    <body> 

    <h1>Control1</h1> 

    <h1>Control2</h1> 

    </body> 
</html> 

Le optimal, dans le sens du temps de chargement de la page, est de faire trois versions de la bibliothèque de ressources. Cependant, cela est probablement exagéré.

    la version
  1. contient des pièces nécessaires pour le contrôle A
  2. version contient les pièces nécessaires pour le contrôle B
  3. version contient toutes les pièces nécessaires pour les contrôles A et B

Ensuite, vous devez sélectionner la version correcte selon le cas vous utilisez le contrôle A, le contrôle B ou les deux.

Questions connexes