2010-05-10 5 views
0

J'ai créé un contrôle Web en ASP pour l'utiliser avec Telligent CommunityServer. Le contrôle est écrit en ASP avec environ 10 lignes de backend C# pour contrôler la visibilité des éléments de l'interface utilisateur en fonction des permissions, mais je dirais que 90% de la fonctionnalité est straight-up Javascript.Plusieurs contrôles sur une page avec plusieurs instances de Javascript

Le contrôle fonctionne à merveille, jusqu'à ce que vous laissiez tomber deux instances du contrôle sur la même page - puisqu'ils font référence aux mêmes fonctions Javascript, un seul contrôle fonctionne.

Comment puis-je prendre cette fonctionnalité que j'ai, ce 1200 lignes de Javascript, et faire en sorte que chaque instance du contrôle peut référencer chaque instance unique de Javascript?

+0

Nous avons besoin de voir un exemple de code, car comme écrit la question n'a pas beaucoup de sens. – Pointy

+0

Eh bien, il y a beaucoup trop de code à échantillonner ... J'ai créé un contrôle Web ASCX qui contient du Javascript. Lorsque je mets deux de ces fichiers ASCX sur une page ASPX, il y a du Javascript en double. Par exemple, ils font tous deux référence à une fonction Javascript Load(), mais cette fonction Load() ne sait pas quel contrôle charger. Avoir du sens? –

+0

Est-ce un widget pour TC5 + ou juste un contrôle pour une autre version de Telligent? –

Répondre

1

Si le problème est simplement de savoir quel élément HTML a déclenché un événement, alors c'est facile - il vous est transmis dans les arguments d'événement. (Vous pouvez alors obtenir son élément parent, bien sûr.) Donc, si je comprends bien le problème, vous avez des fonctions JavaScript référençant certains contrôles, qui sont dupliqués?

Je ne pense pas qu'il existe une solution magique ici: il suffit de rendre les ID uniques. Si vous n'utilisez pas les contrôles côté serveur (qui gèrent cela pour vous automatiquement), vous pouvez utiliser un préfixe ou un suffixe généré par le serveur, par exemple.

<input id="<%= ParentControlId %>_mytextbox" type="text" /> 

ParentControlId est un identifiant unique du contrôle parent (vous pouvez simplement utiliser Control.ID si cela ne vous dérange pas d'ID longues).

Bien sûr, vous devriez essayer de réutiliser vos fonctions JavaScript plutôt que de les dupliquer pour chaque instance de contrôle. Si vous utilisez l'approche ID générée par le serveur, vous devrez passer des ID entiers. Si vous utilisez l'approche du préfixe, vous pouvez simplement faire circuler le préfixe.

0

Comment votre contrôle obtient le JavaScript dans la page, alors? L'injecter directement? Utilisez-vous un ScriptReference? Le navigateur ne chargerait le JS qu'une seule fois si les deux contrôles référencent le même JS (même URL).

De même, votre JS est-il écrit en termes d'ancienne instance? par exemple. avez-vous une fonction comme Load (oControlName) ou est-ce que la fonction Load() a un nom d'instance codé en dur dedans?

IMO, en essayant d'obtenir plusieurs 'JavaScripts' n'est pas la solution - refactoriser votre code peut obtenir votre réponse plus rapidement.

Questions connexes