Ember.js: [2.15.0] {{link-to}} dentro de um parcial parou de funcionar

Criado em 1 set. 2017  ·  25Comentários  ·  Fonte: emberjs/ember.js

Depois de atualizar para 2.15.0, alguns de nossos testes começaram a falhar porque {{#link-to}} dentro de um parcial parou de funcionar.

Este é o {{link-to}} em questão . Ao renderizar, não há erros imediatos, mas o href gerado é apenas # e o atributo data-test-user-id não é exibido durante o teste. Clicar no link gera este aviso:

This link-to is in an inactive loading state because at least one of its parameters presently has a null/undefined value, or the provided route name is invalid.

Todo o resto dentro do parcial ainda é renderizado, é apenas o link que falha.

Alterar a parcial para um componente corrigiu o problema.

Bug Ember 2.15

Comentários muito úteis

Reprodução em 2.15 . Mesmo twiddle funcionando em 2.14 .

Todos 25 comentários

Eu me deparei com um problema semelhante no 2.15, parece que um parcial renderizado dentro de um bloco produzido de um componente não recebe os parâmetros produzidos daquele componente.

Exemplo:

// -name.hbs
<p>{{name}}</p>

component.js

export default Component.extend({
  name: "Ivan"
})

template.hbs

{{yield name}}

some-route-template.hbs

{{#my-component as |name|}}
  {{partial "name"}}
{{/my-component}}

Neste caso, a variável {{name}} na parcial é indefinida.

A mesma coisa acontece com #cada iteração. O valor de #each não é passado para o contexto do parcial.

{{#each visibleContent as |record index|}}
  {{partial rowTemplate}}
{{/each}}

Tanto o registro quanto o índice são indefinidos na parcial.

Reprodução em 2.15 . Mesmo twiddle funcionando em 2.14 .

Curiosamente, eu ainda posso fazer referência a uma propriedade de variável "perdida" por seu nome, por exemplo, em rowTemplate eu poderia fazer record.id mas não (get record "id") . Não tenho certeza se isso ajuda a depurar o problema.

Este comportamento é legado ou existe uma abordagem alternativa que deve ser considerada? Temos tentado usar componentes em vez de parciais, mas para nosso aplicativo maior ainda existem muitos casos em que esse bug está quebrando coisas. Nesse ponto, não podemos fazer upgrade e estou surpreso que isso não esteja afetando mais pessoas.

Não, este não é um comportamento legado em si, mas é bastante incomum. Você deve _totalmente_ migrar para o uso de componentes sempre que puder (é muito mais simples de raciocinar), mas devemos consertar isso o mais rápido possível.

@rwjblue alguma

Enviei https://github.com/emberjs/ember.js/issues/15674 com alguns casos de teste com falha. Parece que o problema não é tão simples quanto acessar valores de propriedade vinculados dentro do parcial (pelo menos não parecia com meus testes). Acredito que o problema subjacente tem a ver com a maneira como geramos as referências usadas por coisas como if , unless , with e get .

Infelizmente, eu não tenho uma arma fumegante para apontar. :(

também não podemos atualizar devido a esse bug. semelhante ao @ thec0keman , temos um aplicativo ember bastante grande que foi originalmente iniciado usando EAK, então ainda há algumas funcionalidades remanescentes que ainda não trouxemos para o ember moderno

não temos muitos parciais restantes, mas o suficiente para que este seja um bloqueador para nós até que tenhamos tempo para migrar / testar os parciais restantes para os componentes

Este deve realmente ter alguma prioridade mais alta, parciais estão quebrados desde 2.15 e impedem que as pessoas atualizem de 2.14 para 2.16.

+1

Vou dar uma olhada nisso na próxima semana após o EmberFest.

Eu já estendeu o giro de @Serabe e descobri que, se uma propriedade com o mesmo nome fica definida no controlador, os parciais obtém o valor certo. Mas se um valor em um array for undefined a parcial ainda pensa que tem um valor verdadeiro.

Este é um bug no Glimmer. Veja no problema referenciado.

Uma nova versão glimmer com a correção foi lançada. Depois de atualizar a versão do glimmer, este bug deve ser corrigido. Abri uma solicitação de pull para atualizar a versão do glimmer.

Para sua informação - a atualização para o Glimmer 0.29 é um grande esforço (e improvável que aconteça antes do Ember 3.0.0), @chadhietala fez o backport da correção para o branch 0.25. Precisamos lançar isso como uma versão de patch e atualizar para essa versão. Vou tentar fazer esses lançamentos hoje ...

@rwjblue LMK se houver algo que eu possa ajudar com o lançamento, que inclui o branch 0,25 corrigido (já que estou trabalhando na atualização do Intercom no momento). Pelo que eu posso dizer, ainda não atingiu o canário de brasa

O mesmo problema também existe se usar o helper with :

{{#with someProperty as |youNameIt|}}
  {{partial somePartial}}
{{/with}}

Provavelmente o patch irá consertar isso também, mas com certeza menciono aqui!

Oi. Existe uma correção lançada para este problema? Até onde eu posso dizer, a maioria dos ajudantes são afetados de alguma forma quando usados ​​em um partial . Existe uma solução alternativa?

Ember 2.16.1 foi lançado e deve corrigir os problemas com parciais. Informe-me se ainda estiver tendo problemas

Embora esses problemas tenham sido corrigidos, para sua informação, acabei de encontrar outro problema com parciais:

https://github.com/emberjs/ember.js/pull/15797

Vou trabalhar para consertar isso mais tarde hoje

Vocês têm certeza de que está resolvido para 2.15? O twiddle de

A propósito, percebi que se você modificar o parcial para escrever name , ele realmente imprime o valor correto ...

image

Não é. O Ember 2.15 não é um LTS, então não acho que uma correção virá.

Confirme.

Ah ok. Achei que a correção retroativa para o glimmer 0.25 significaria que isso funcionaria no Ember 2.15 também. Acho que vamos pular diretamente para 2.16 então. Obrigado!!

Esta página foi útil?
0 / 5 - 0 avaliações