[Bug-11810, Bug-15430, Feature-15431]Bug perspectiveClosePopup

Hi everyone,
segnalo un bug nel funzionamento di prespective.closePopup().

L’azione chiude tutti popup visualizzati, benché sia stato indicato un ID specifico. Più esattamente se il popup con ID indicato è aperto viene chiuso e gli altri rimango aperti, se il popup con ID indicato non è aperto viene chiuso uno qualsiasi dei popup aperti.

Per testare questo basta creare una pagina con quattro pulsanti: nei primi tre aprire i popup con ID diversi e nel quarto chiudere un popup specifico. Al primo click viene chiuso il popup con l’ID specificato , con i successivi click viene chiuso uno dei popup ancora aperti.

Grazie.

Questo è un bug di vecchia data di cui siamo a conoscenza, ma grazie per averlo segnalato.

Quando è prevista una fix?

Questo bug è presente sin dai primi giorni di Perspective e non c’era stata la forza trainante per risolverlo fino alla settimana scorsa, quando è diventato un problema per il nostro team di sviluppo interno, quindi è difficile dirlo. In teoria, questo errore è il risultato di decisioni di progettazione discutibili, quindi inizialmente è stata data una priorità bassa. Se stai riscontrando questo errore, dovresti considerare come riesci a trovarlo e implementare un metodo alternativo per identificare e / o indirizzare i tuoi popup.

Perchè è il frutto di decisioni di progettazione discutibili? Idee su come implementare un modo alternativo per identificare indirizzare i popup

Grazie.

In generale, i popup dovrebbero sempre essere responsabili del mantenimento di se stessi. Il modo più ovvio per gestire un popup è con l’icona di chiusura nell’angolo in alto, che non richiede alcun id per iniziare. Il secondo metodo richiede un riconoscimento o il licenziamento di
Popup usando qualcosa come il comune paradigma “Annulla” / “OK”. In questo caso, è necessario che quei pulsanti chiudano il popup con un ID che è stato passato al Popup come parametro quando è stato aperto.

In entrambi questi esempi, il Popup stesso è responsabile della chiusura di se stesso e non esiste alcuna possibilità di scegliere come target un popup errato. Dal suono del tuo problema, sembra che tu stia tentando di chiudere un popup che non è aperto, il che significa che stai tentando di controllare un popup dall’esterno di un popup, cosa che non dovresti fare.

perchè no? comunque l’esigenza di chiudere i popup nasce dalla mancanza di poter inserire tooltip sugli oggetti al passaggio del mouse. quindi l’idea migliore è più generica mi è sembrata quella di aprire un popup.

Altro motivo per poter chiudere i popup dall’esterno e per gestire la chiusura e l’apertura del popup su evento, ad esempio la variazione di una tag

Vorrei mettere in guardia contro l’apertura o la chiusura di popup in base a eventi che sono fuori dal controllo dell’utente. Non sto dicendo che non dovresti mai farlo, solo che dovresti usare cautela. Gli eventi di modifica dei tag probabilmente non dovrebbero aprire o chiudere i popup perché i valori dei tag sono fuori dal controllo di un utente.

Inoltre, sembra che anche se apri un popup attraverso un evento di modifica tag, dovresti aprirlo con un’icona di chiusura configurata, a quel punto non hai bisogno di controlli esterni per esso.

Forse un caso d’uso più definito potrebbe aiutarmi a capire perché è necessario utilizzare i controlli esterni per i tuoi popup, oppure permettermi di aiutarti a selezionare un modello di controllo più incentrato sui popup. Perché - nel tuo progetto attuale - ritieni di dover utilizzare controlli esterni per chiudere i popup? Come vengono aperti attualmente questi popup?

Al momemento, come dicevo il motivo per cui chiudere il popup dall’esterno é per ovviare al fatto che non c’è la possibilità di avere i tooltip sugli oggetti, quindi apro un pop con l’evento mouseOver e lo chiudo con l’evento mouseOut.
L’evento tag era un esempio come un ulteriore caso di utilizzo della apertura/chiusura al di fuori del popup.

P.S. Ma non bastava implementare la funzione di chiusura in modo tale che se non trova l’id non esegue niente?

Tooltips è un caso d’uso abbastanza valido per i popup (ma solo perché al momento non forniamo un modo per configurare i tuoi popup). MouseEnter / mouseLeave è davvero il modo per farlo, ma c’è un bug che ho appena aperto che impedirebbe che ciò avvenga correttamente.

Il problema in questo momento è che l’apertura di un popup in una posizione relativa (assumendo Prospettiva> = 8.0.6) lo apre esattamente nella posizione del cursore del mouse ma in una direzione relativa, il che significa che quando il popup apre il mouse entra nel popup , il che significa che ha lasciato il componente, che quindi chiude il popup.

Ecco la configurazione di base:

  1. Aggiungi una proprietà personalizzata al componente a cui desideri aggiungere una descrizione comando (ho chiamato la mia proprietà “hash”).
  2. Ho legato questa proprietà a un’espressione che consisteva nel componente name aggiunto al nome del genitore del mio componente, che ho poi trasformato con uno script in cui ho restituito hash (value).
  3. Ho configurato un evento mouseEnter che ha invocato un’azione popup e ho specificato l’identificatore come {/ <pathToComponent> / <componentname> .custom.hash}.
  4. Ho quindi configurato un evento mouseLeave che ha eseguito un’azione popup per chiudere un popup, in cui ho specificato lo stesso identificatore.
  5. Infine, ho impostato il popup per aprirsi in una posizione relativamente a destra.

A causa del bug esposto in questa configurazione, attualmente non funzionerà, ma è così che vorresti gestire questi popup.

è esattamente quello che ho fatto, solo che mi sono ritrovato a dover gestire il bug della funzione closePopup() che ho segnalato.

Grazie

The issue with system.perspective.closePopup() has been fixed in 8.0.12 and will be available in the next nightly build.