Se io, come un altro utente finale, ho capito bene, è la stessa cosa che sto sperimentando abbastanza spesso. Un argomento si sta ricaricando e per un breve momento, un battito di ciglia o due, il forum mostra un post più vecchio e poi salta al bordo dell’ultima visita. Mi è successo pochi istanti fa e mi aspettavo un salto, ma ha smesso di mostrare un vecchio post.
Quindi… non so programmare, ma sembra un errore strano, in stile timeout - come se tutto fosse sempre al limite e dopo un brevissimo incidente di lag Discourse cercasse di tenere il passo e mostrasse quello che c’è sullo schermo in quel momento.
Quando ho abilitato la modalità “slow” posso vedere il lockon chiamato per bloccare un post sullo schermo, ma non riesco a vederlo nemmeno renderizzato, quindi il posizionamento è molto errato.
L’intera classe LockOn è un po’ un hack, in questo caso forse invece di bloccare e memorizzare nella cache una posizione facciamo qualcos’altro? Forse esiste un meccanismo per chiamare il lock on più tardi dopo che lo schermo è già popolato con argomenti renderizzati?
Grazie mille per i chiari passaggi di riproduzione @Don
Sì, è proprio così! Ci sono due cose che accadono contemporaneamente
Il servizio di caricamento dello slider deve rimuovere la classe still-loading dal body
LockOn deve scorrere nel punto giusto
Entrambi erano programmati nella parte afterRender del runloop di Ember. E poiché le cose di ‘lock on’ sono tecnicamente programmate per prime, sono state eseguite per prime. E così LockOn è stato eseguito mentre tutto l’HTML del post era nel DOM, ma aveva ancora display: none.
Questo PR sposterà la rimozione della classe still-loading nella parte ‘render’ del runloop, il che significa che qualsiasi altra cosa che programma qualcosa in afterRender verrà eseguita una volta che tutto sarà renderizzato e visibile:
D’accordo! Non volevo toccarlo come parte di questa correzione di bug, ma penso che dovremmo puntare a rimuovere tutte quelle soluzioni di fortuna.
Leggendo i commenti nel file, sembra che sia stato originariamente introdotto (10 anni fa!) per contrastare le funzionalità di ‘ripristino dello scorrimento’ del browser. Al giorno d’oggi, usiamo history.scrollRestoration = false per disabilitare quella funzionalità del browser, quindi penso che ciò renda ridondanti molte delle vecchie soluzioni di fortuna.
Probabilmente è meglio provare questo tipo di modifica sensibile tramite un componente tema per prima cosa, e poi se tutto sembra a posto potremo unirlo al core. Immagino che la rimozione di LockOn risolverà molti altri casi limite che abbiamo con la posizione di scorrimento dei topic. Cercherò di provarlo nelle prossime settimane