Ember.js: ember 2.10 segment dynamique d'itinéraire non défini ne fonctionne plus

Créé le 30 nov. 2016  ·  22Commentaires  ·  Source: emberjs/ember.js

Cela ressemble plus à une fonctionnalité non prise en charge qu'à un bogue, mais j'ai pensé que je le consignerais.

Lors de la mise à niveau de 2.9.1 à 2.10, j'ai rencontré l'exception suivante.

"Assertion Failed: You attempted to define a `{{link-to "timecards"}}` but did not pass the parameters required for generating its dynamic segments. You must provide param `login` to `generate`."
#app/router.js
this.route('timecards', {path: '/timecards/:login'}, function() {
  this.route('index', { path: '/' });
  this.route('timecard-day', {path: '/day/:date'});
  this.route('pay-period', {path: '/pay-period/:date'});
});

#app/routes/timecards.js #model hook
model(params) {    
  let login = params.login || this.get('currentUser.login');
  return this.store.peekAll('user').findBy('login', login);
}

Il était assez pratique d'utiliser un segment dynamique facultatif sur la route parente pour charger un modèle utilisateur par défaut plutôt que d'avoir à le charger pour chaque route enfant individuelle.

Ember 2.10 Inactive Needs Bug Verification Needs Submitter Response

Commentaire le plus utile

Ceci bloque pour nous 2.10 et 2.11. Heureux d'essayer une solution si quelqu'un peut confirmer qu'il s'agit d'une régression.

Tous les 22 commentaires

Je suis assez sûr que vous pouvez toujours le faire en passant undefined et en implémentant un hook de sérialisation personnalisé.

Le message d'erreur ajouté ici est une assez grande victoire pour les gens en général, et je préférerais le garder si possible ...

@rwjblue passant undefined à l'assistant de lien vers renvoie cet avertissement: 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.

J'ai également eu des problèmes avec:

{{link-to 'projects.project.tasks' project}}
  this.route('projects', function() {
    this.route('project', { path: ':id' }, function() {
      this.route('tasks');
    });
  });

L'erreur Ember a parlé de id indéfini.
La solution rapide pour cela était de changer :id dans le routeur en :project_id

Je pense que ce n'est pas une vraie solution et cela mérite d'être qualifié de bogue. Sinon, il n'y avait aucune information sur la modification du comportement du routeur.

@Exelord qui n'est pas lié au bogue décrit à l'origine, et non à un bogue. Nous documentons spécifiquement que l'implémentation par défaut nécessite :modelname_id pour fonctionner immédiatement. Si vous utilisez un champ personnalisé, vous devrez réimplémenter la sérialisation / désérialisation dans la route respective.

@Exelord (comme une note secondaire, pas directement liée à ce problème) ... Je ne suis pas sûr si cela est documenté ou non, mais je ne pense pas que vous puissiez utiliser le même identifiant pour un segment dynamique plus d'une fois dans le routeur . J'éviterais donc d'utiliser ": id", et j'éviterais également d'utiliser ": modelname_id" plus d'une fois. (par exemple si nécessaire à nouveau peut-être utiliser ": newmodelname_id", juste quelque chose de différent)

@rwjblue @ sly7-7 donc il semble qu'il n'y a pas de

@arenoir pouvez-vous faire une reproduction de braise-twiddle de ce problème, cela ressemble à un bug. Avoir un repo du problème aidera à diagnostiquer le problème et fournira également la vérification du bogue.

@locks @pixelhandler
Vous avez un droit, les gars. Merci pour l'aide et l'explication. Mais en effet, cela fonctionnait avant la 2.10.
Je suppose que maintenant, c'était un bug ou un comportement inattendu.

@pixelhandler ok, voici un twiddle.

: point_up: ressemble à une bonne reproduction. cette étiquette peut être supprimée

Je ne sais pas si cela doit être considéré comme une régression ou si je dois corriger dans l'application.

Ceci bloque pour nous 2.10 et 2.11. Heureux d'essayer une solution si quelqu'un peut confirmer qu'il s'agit d'une régression.

Même problème pour moi que décrit par @arenoir

Rencontrer ce même problème aujourd'hui 👎

@jakeleboeuf J'avais le même problème et la mise à niveau vers la version 2.13.1 l'a corrigé. Quelle version avez-vous?

[ÉDITER]
Il est 2 heures du matin ici et mon cerveau est presque parti dans l'espace lointain. Je viens de réaliser que je l'ai mal testé. Ça continue encore ...

Au cas où quelqu'un rencontrerait ce problème, cela pourrait être:

import Controller from 'ember';
import { alias } from 'ember-computed';

export default Controller.extend({
  deployments: alias('model')
});

Notez que j'importe Contoller façon incorrecte import Controller from 'ember-controller'; . C'est si vous utilisez ember-cli-shims, ce que mon projet actuel utilise. J'étais perdu là-dessus pendant environ une heure avant d'abandonner, de revenir et de voir clairement ce que je faisais de mal.

Long shot ici, mais j'ai rencontré ce problème en remplaçant accidentellement le Object natif avec la classe Object d'Ember via quelque chose comme:

const { Object } = Ember;

Cela provoquait l'échec de mon hook de modèle (où Object.create est appelé) et, pour une raison quelconque, l'exception lancée mentionnait que les segments dynamiques n'étaient pas présents. Je pense que c'est similaire à ce que @alvincrespo mentionne dans son commentaire ci-dessus.

@lrdiv ouais, je pense que cela arrive avec moi.

Assertion Failed: You attempted to define a `{{link-to "control.templates.show"}}` but did not pass the parameters required for generating its dynamic segments. _ember.default.extend is not a function

@brunowego Ouais, c'est la même erreur que j'obtenais. Dans notre cas, il semble que ce soit plus une exception trompeuse qu'un vrai bogue.

@lrdiv cela m'arrivait aussi, bonne prise! : v:

Ce que je faisais était de déstructurer Ember et de remplacer précisément le Object natif par ce qui était autrement un Ember.Object . J'ai donc changé le nom en quelque chose comme const EmberObject = Ember.Object dans la déclaration et l'utilisation et tout s'est passé dans le bon sens. Je n'appellerais pas cela un bug-bug non plus, donc je suis d'accord avec vous sur à peu près tout ce que vous avez écrit ci-dessus: stuck_out_tongue_winking_eye:

@Exelord @acorncom @alvincrespo @arenoir @asvny @bjornharrtell @brunowego @carlbennettnz @dustinfarris @jakeleboeuf @locks @lrdiv @nightsh @rwjblue @ sly7-7 @tarikozket est-ce toujours un problème, peut-être devrions-nous fermer ou créer une nouvelle reproduction ça, qu'en pensez-vous?

En fermant pour l'instant, n'hésitez pas à rouvrir si vous pouvez reproduire dans la version actuelle d'Ember.

Cette page vous a été utile?
0 / 5 - 0 notes