Frage

Ich habe bei der Integration mit Telligent-Community eine Web Control in ASP für den Einsatz geschaffen. Die Steuerung ist in ASP mit einigen 10 Zeilen C # Backend geschrieben für auf Berechtigungen basierend Sichtbarkeit der UI-Elemente zu steuern, aber ich würde 90% der Funktionalität sagen ist straight-up Javascript.

Die Steuerung funktioniert wunderbar, bis Sie auf der gleichen Seite zwei Instanzen der Kontrolle fallen -., Da sie exakt die gleichen Javascript-Funktionen verweisen, nur eine Steuer Werke

Wie kann ich diese Funktion übernehmen, dass ich habe, diese 1200 Zeilen Javascript, und machen es so, dass jede Instanz der Steuerung kann seine jede einzelne Instanz von Javascript?

Referenz
War es hilfreich?

Lösung

Wenn das Problem einfach ist, herauszufinden, welches HTML-Element ein Ereignis ausgelöst, dann, das einfach - es in den Ereignisargumenten an Sie weitergegeben wird. (Sie können dann ihr Mutterelement erhalten, natürlich.) Also, wenn ich das Problem richtig verstanden haben Sie JavaScript-Funktionen einige Steuerelemente verweisen, die get duplizierten?

Ich glaube nicht, dass es irgendeine magische Lösung hier: Sie müssen nur die IDs einzigartig machen. Wenn Sie nicht die serverseitige Kontrollen unter Verwendung (die dies für Sie automatisch handhaben), dann können Sie einige serverseitige erzeugt Präfix oder Suffix verwendet werden, zB.

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

wo ParentControlId ist eine eindeutige Kennung von der übergeordneten Steuerung (Sie nur Control.ID verwenden können, wenn Sie nicht lange IDs nichts dagegen).

Natürlich sollten Sie versuchen, Ihre JavaScript-Funktionen wieder zu verwenden, anstatt sie für jede Steuerungsinstanz duplizieren. Wenn Sie den Server-generierte ID Ansatz verwenden werden Sie ganze IDs um übergeben. Wenn Sie den Präfix Ansatz verwenden können Sie nur das Präfix passieren um.

Andere Tipps

Wie ist Ihre Kontrolle das JavaScript in die Seite bekommen, dann? Injizierenden es direkt? Verwenden Sie einen Script? Der Browser laden würde nur die JS einmal, wenn beide Kontrollen verwiesen, dass gleiche JS (gleiche URL).

Auch ist Ihre JS in Bezug auf jede alte Instanz geschrieben? z.B. Sie haben Funktion wie Load (oControlName) oder ist die Load () Funktion ein hartcodierte Instanznamen im Innern hat?

IMO, versuchen, mehrere ‚JavaScripts‘ zu bekommen, ist nicht der Weg nach vorn -. Ihr Code Refactoring können Sie Ihre Antwort schneller bekommen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top