Modificando dinamicamente o atributo style no Item da Lista de Tópicos

Disclaimer: muito satisfeito com a direção aqui e obrigado por todo o trabalho até agora, pois há muito poder no novo sistema. Apenas precisamos garantir que mantemos algumas capacidades equivalentes? …

No meu Componente, TLP, estou atualmente definindo o atributo de estilo da tag externa do Item da Lista de Tópicos dinamicamente:

  • definindo a cor background: para um valor RGB exclusivo para corresponder à cor dominante da imagem. Isso deve ser feito idealmente no loop Ember.

Também estou definindo grid-row-end para determinar rapidamente o tamanho do elemento de alvenaria. Isso é muito rápido e eficiente e evita muito Javascript. No entanto, para isso, estou usando Javascript, pois depende dos tamanhos finais no DOM.

Atualmente, esses coexistem harmoniosamente.

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 são personalizações críticas para o Componente de Tema e, sem elas, não seria suportável.

Esta primeira alteração de estilo é atualmente realizada com uma ligação direta de atributo de estilo com modifyClass, que entendo ser um método obsoleto.

Seria possível ter uma API no novo mundo para isso, por favor?

Ou talvez eu tenha perdido uma maneira existente de fazer isso?

No entanto, isso não é algo que acredito que possa ser alcançado com classes.

3 curtidas

É mesmo? :confused: Não é apenas necessário atualizar para a sintaxe de classe nativa?

Estou seguindo isto

1 curtida

Ah, entendi. Pensei que isso significava esta atualização.

1 curtida

Seria bom ter clareza.

  • Então modifyClass ainda é válido? (Apenas sintaxe atualizada - pode ser bom, se for o caso, referenciar esse guia)
  • Ainda posso usá-lo para acessar o atributo de estilo da tag de fechamento?

Componentes Clássicos são diferentes no sentido de que historicamente forneceram acesso a atributos de nível de tag de fechamento fora do template, então eram fáceis de modificar dinamicamente no código.

1 curtida

Ah, você está certo. Há um aviso de depreciação no console.

Aviso de depreciação: Modificar ‘component:topic-list-item’ com ‘modifyClass’ está obsoleto. Use o transformador de valor ‘topic-list-columns’ e outras novas APIs do plugin topic-list em vez disso.

1 curtida

modifyClass em si não está obsoleto. É um método de personalização arriscado, e você deve tomar precauções ao usá-lo (conforme descrito na documentação que @don vinculou), mas não temos planos iminentes de removê-lo.

O motivo pelo qual estamos exibindo uma mensagem de obsolescência para component:topic-list e component:topic-list-items é que esses componentes são a implementação legada da lista de tópicos e não são usados quando a lista de tópicos do glimmer está habilitada. Agora, temos um conjunto de componentes glimmer como components/topic-list/item.

Portanto, tecnicamente, você poderia usar modifyClass nesses novos componentes. Mas, como são componentes glimmer, você não poderá modificar a tag de estilo através da classe JS, então isso não ajudará com o problema na postagem original.

Temos um modo semelhante de ‘masonry’ no componente de tema oficial d-topic-thumbnails, então vale a pena ver como isso é implementado. Adicionamos uma classe única a cada ‘linha’ da lista de tópicos:

Em seguida, renderizamos uma tag <style> dinâmica em um plugin-outlet separado, que visa esses nomes de classe:

Dito isso… é um pouco complicado, então talvez devêssemos considerar adicionar um valueTransformer específico para permitir a alteração do atributo style=. É um pouco complicado por causa das proteções xss/htmlSafe do Ember nesse atributo… mas tenho certeza de que poderíamos fazer algo funcionar.

3 curtidas

Obrigado por considerar isso, David, seria ótimo!

David, tenho mais uma pergunta: seria possível interceptar eventos do Glimmer como didInsert, didUpdate, willDestroy através da nova API?

Eu quero executar um JavaScript adicional no didInsert, por exemplo, o que atualmente é tratado por @on e modifyClass.

(Ficarei feliz em criar um novo Tópico para isso, se preferir)

Vou tentar sua técnica por enquanto:

1 curtida

Poderíamos introduzir transformadores específicos em certos locais. Mas não vejo a gente adicionando uma API geral que permitiria a você se conectar a qualquer elemento/componente.

Quanto à discussão sobre o atributo style=, eu fiz este PR. Tentarei que ele seja revisado/mesclado:

3 curtidas

Obrigado. Até agora tudo bem com sua técnica atual, eu a adaptei para TLP e parece funcionar bem. Revertirei se encontrar mais lacunas potenciais.

Incrível! Estarei pronto para isso quando for mesclado, estou ansioso por isso! Obrigado David!

3 curtidas

Funciona como um encanto, obrigado novamente! :rocket:

2 curtidas

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