Ember.js: Error engañoso en la migración 3.15

Creado en 27 dic. 2019  ·  3Comentarios  ·  Fuente: emberjs/ember.js

Durante mis aventuras de migración de Octane me encontré con este error:

index.js:172 Uncaught Error: Assertion Failed: You attempted to generate a link 
for the "cashbook" route, but did not pass the models required for generating 
its dynamic segments. Assertion Failed: The <strong i="6">@action</strong> decorator must be 
applied to methods when used in native classes

Screenshot 2019-12-27 at 22 31 47

Me confundí en la primera parte de "generar enlace", pero el problema principal está en el "decorador de @acción ". Una vez que resolví esto, el error en la "ruta del libro de caja" desapareció.

Creo que hay dos formas de mejorar el DX:
1) Parece que lo que sea que produzca el error de "ruta del libro de caja" (¿asumo un componente LinkTo ?) Una vez que detecta _alguna_ excepción, asume erróneamente que los models no se proporcionaron.
2) Si el segundo error que se queja de @action me da una pista sobre el archivo que es incorrecto, encontraría la fuente del problema mucho más rápido.


Nota a pie de página para quien pueda sufrir el mismo problema: tenía action y task (de ember-concurrency) definidos en un controlador con los mismos nombres . Después de ejecutar npx ember-native-class-codemod http://localhost:4200 ./app codemod, sus nombres chocaron en el espacio de nombres de nivel de clase.

Bug

Todos 3 comentarios

Un poco de antecedentes aquí, la afirmación en cuestión se agregó en https://github.com/emberjs/ember.js/pull/14554. Esa corrección asume que la única razón por la que esto puede producir un error es que no ha proporcionado suficientes parámetros dinámicos (y la razón por la que aumentamos el mensaje de error es que necesita conocer la ruta de destino).

Creo que la solución correcta aquí sería actualizar este bloque catch :

https://github.com/emberjs/ember.js/blob/d1ad76a2b22ce470639df3dfc6efb6864a70f588/packages/%40ember/-internals/glimmer/lib/components/link-to.ts#L770 -L777

A cualquiera:

  1. Elimine el bit sobre segmentos dinámicos no válidos (de modo que el mensaje solo mencione algo como "Se produjo un error al generar un vínculo
    para la ruta del "libro de caja", $ {e.message} "
  2. Verifique si el error que realmente se arroja es el esperado, si lo es, haga el assert , si no, entonces throw e

Sí, acabo de tener el mismo problema en 3.18, gracias por publicar esto, hizo que fuera fácil ver más allá del bit de enlace de generación al problema real de @action decorator en mi caso siendo el mismo nombre que otro.

En mi caso, fueron nombres de acciones duplicados.

¿Fue útil esta página
0 / 5 - 0 calificaciones