TMG ha terminato l'attività. Grazie per esser stati con noi. Questo sito non è più aggiornato e resta su solo per alcuni prodotti obsoleti che però fanno ancora traffico anche se non dovrebbero ma la colpa semmai è di google.

FasterJoomla

Joomla security and optimization

Visita il nuovo sito FasterJoomla che raccoglie i nostri articoli ed estensioni per Joomla!

Si parla di sicurezza, velocità, sviluppo di estensioni per Joomla.

Trovate pubblicate anche le nostre guide pratiche.

Ora finalmente possiamo preoccuparci di creare istanze molteplici.

Tutti gli oggetti che hanno un nome o un ID dovranno essere modificati, e così gli stili (che fanno riferimento agli id: div#msgBoxDiv).

  • Per il nome delll'oggetto, lascio all'applicazione chiamante la decisione (mioNomeMessageBox = new msgBox(...
  • Per il nome degli elementi html, div, a ecc.: aggiungo "_" + l'id
  • Per gli stili, aggiungo una classe dove necessario e modifico il foglio di stile

Per fare rapidamente la sostituzione, dovremo rivedere tutte le chiamate a getElementById() e a msgBox

In fase di creazione, prenderò un contatore assoluto (msgBoxCounter) e lo incrementerò man mano che creo oggetti;

Quindi potrò utilizzare questo contatore in combinazione con i vari oggetti, divMsgBox diventerà divMsgBox_ID.

Questo permette di identificare assolutamente l'oggetto cui mi devo riferire. Però non mi aiuta molto nelle funzioni di callback, motivo principale per cui devo fare questa modifica.

Per farlo, l'unico oggetto cui posso far riferimento è quello che invoca la funzione; nel caso del mouseClick il problema non sussiste, potrei aggiungere dinamicamente una proprietà ai bottoni, es. <button id="button1_15" id_msgBox="15"> ed utilizzare srcElement.id_msgBox negli eventi per accedervi ed agire di conseguenza.

Ma negli eventi da tastiera il problema è più ampio: potrebbe essere qualunque oggetto visualizzato ad iniziare la comunicazione, e per di più potrebbe essere lo stesso document.

Quindi, invece di diventare matto a far tutte queste modifiche è meglio pensare a come viene usata la nostra msgBox. In effetti l'unica cosa che mi interessa è che i vari metodi accedano alla msgBox che è correntemente visualizzata- e ne ho visualizzata una sola alla volta. Così è semplice valorizzare nei metodi tell(), ask() e listChoose() una variabile globale msgBoxAttiva (che contiene l'id), e msgBoxInstance (che contiene un riferimento all'oggetto), ed usare queste come riferimenti.

La creazione dell'oggetto avrà un parametro aggiuntivo, msgBoxCounter:

function _msgBox(....
 ...
            rDivModal.id = 'msgModalDiv_'+msgBoxAttiva; 
            rDivModal.id_msgBox =  msgBoxAttiva;
 ...
 

e tutte le funzioni che hanno bisogno di accedere all'html con getElementById() andranno ad usare:

     this.divMsgBox = document.getElementById("msgBoxDiv_"+msgBoxAttiva)

mentre gli accessi all'oggetto msgBox_xxx saranno fatti con 

    with (msgBoxInstance) 

I metodi che dovranno usare questi nuovi riferimenti sono quelli di callback, ovvero l'handler del mouse, della tastiera e del timeout.

 


I file descritti in questo articolo si possono scaricare dall'introduzione