Modificación del atributo style dinámicamente en el ítem de lista de temas

Descargo de responsabilidad: Muy contento con la dirección aquí y gracias por todo el trabajo hasta ahora, ya que hay mucha potencia en el nuevo sistema. ¿Solo necesitamos asegurarnos de mantener algunas capacidades equivalentes? …

En mi Componente, TLP, actualmente estoy estableciendo el atributo de estilo de la etiqueta externa del Elemento de Lista de Temas dinámicamente:

  • Estableciendo el color background: a un valor RGB único para que coincida con el color dominante de la imagen. Esto idealmente debería hacerse en el bucle de Ember.

También estoy estableciendo grid-row-end para determinar rápidamente el tamaño del elemento de mampostería. Esto es muy rápido y eficiente y evita mucho Javascript. Sin embargo, para esto, uso Javascript ya que depende de los tamaños finales en el DOM.

Actualmente, estos coexisten felizmente.

image

<tr> style="background: rgb(56, 10, 58); grid-row-end: span 48;" data-topic-id="23321" id="ember168" class="topic-list-item category-uncategorized tag-inforunners visited white-text has-thumbnail tiles-grid-item ember-view" data-is-last-viewed-topic="true">

Ambas son personalizaciones críticas para el Componente de Tema y, sin ellas, no sería compatible.

Esta primera modificación de estilo se logra actualmente con una vinculación directa de atributos de estilo con modifyClass, que entiendo que es un método obsoleto.

¿Sería posible tener una API en el nuevo mundo para esto, por favor?

¿O tal vez me he perdido una forma existente de hacer esto?

Sin embargo, esto no es algo que crea que se pueda lograr con clases.

3 Me gusta

¿Lo es? :confused: ¿No es solo que requiere actualizar a la sintaxis de clase nativa?

Me baso en esto

1 me gusta

Oh, ya veo. Pensé que eso significaba esta actualización.

1 me gusta

Sería bueno tener claridad.

  • ¿Sigue siendo modifyClass válido? (Sintaxis recién actualizada; sería bueno si es así hacer referencia a esa guía)
  • ¿Todavía puedo usar eso para acceder al atributo de estilo de la etiqueta contenedora?

Los componentes clásicos son diferentes en que históricamente proporcionaron acceso a los atributos del nivel de la etiqueta contenedora fuera de la plantilla, por lo que era sencillo modificarlos dinámicamente en el código.

1 me gusta

Ah, tienes razón. Hay un aviso de deprecación en la consola.

Aviso de deprecación: Modificar ‘component:topic-list-item’ con ‘modifyClass’ está obsoleto. Usa el transformador de valor ‘topic-list-columns’ y otras nuevas API del plugin topic-list en su lugar.

1 me gusta

modifyClass en sí mismo no está obsoleto. Es un método de personalización arriesgado y debes tomar precauciones al usarlo (como se describe en la documentación que @don enlazó), pero no tenemos planes inminentes para eliminarlo.

La razón por la que imprimimos un mensaje de obsolescencia para component:topic-list y component:topic-list-items es que esos componentes son la implementación heredada de la lista de temas y no se utilizan cuando la lista de temas de Glimmer está habilitada. Ahora, tenemos un conjunto de componentes de Glimmer como components/topic-list/item.

Por lo tanto, técnicamente, podrías usar modifyClass en esos nuevos componentes. Pero, debido a que son componentes de Glimmer, no podrás modificar la etiqueta de estilo a través de la clase JS, por lo que no ayudará con el problema en el OP.

Tenemos un modo similar de ‘mampostería’ en el componente temático oficial d-topic-thumbnails, por lo que vale la pena ver cómo se implementa. Agregamos una clase única a cada ‘fila’ de la lista de temas:

Luego, renderizamos una etiqueta <style> dinámica en un plugin-outlet separado, que apunta a esos nombres de clase:

Dicho esto… es un poco complicado, así que tal vez deberíamos considerar agregar un valueTransformer específico para permitir cambiar el atributo style=. Es un poco complicado debido a las protecciones xss/htmlSafe de Ember en ese atributo… pero estoy seguro de que podríamos hacer que algo funcione.

3 Me gusta

¡Gracias por considerarlo, David, sería genial!

David, tengo otra pregunta, ¿sería posible conectarse a eventos de Glimmer como didInsert, didUpdate, willDestroy a través de la nueva API?

Quiero ejecutar algo de JavaScript adicional en didInsert, por ejemplo, lo que actualmente se maneja con @on y modifyClass.

(Estaré encantado de crear un nuevo Tema por cierto)

Por ahora intentaré tu técnica aquí:

1 me gusta

Podríamos introducir transformadores específicos en ciertos lugares. Pero no veo que añadamos una API general que te permita adjuntarte a cualquier elemento/componente.

En cuanto a la discusión del atributo style=, hice esta PR. Intentaré que se revise/combine:

3 Me gusta

Gracias. Hasta ahora todo bien con tu técnica actual, la he adaptado para TLP y parece funcionar bien. Revertiré si encuentro más posibles lagunas.

¡Genial! Estaré listo para cuando se combine, ¡tengo muchas ganas! ¡Gracias David!

3 Me gusta

¡Funciona de maravilla, gracias de nuevo! :rocket:

2 Me gusta

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.