2014-02-16 6 views
6

Ich bin neu zu Ember und baue eine sehr einfache App. Ich kann von meiner Züchter-Index-Seite (/ Züchter) zu meiner Züchter-Show-Seite (/ Züchter /: Züchter-ID) navigieren, indem ich auf den Link klicke, der vom Link-zu-Tag erzeugt wird. Allerdings, wenn ich den Züchtern/1 oder einem der anderen breeders.show Routen ich folgende Fehlermeldung manuell navigieren erhalten:Ember "Params ist nicht definiert" in Routing

Error while loading route: ReferenceError: params is not defined 
at Catapp.BreedersShowRoute.Ember.Route.extend.model 

Ich kann nicht herausfinden, was ich getan habe, dass dies verursacht.

Dies ist, was ich denke, ist der entsprechende Code:

//router.js 
    Catapp.Router.map(function() { 
     this.resource('breeders', function() { 
      this.route('new'); 
      this.route('show', {path: '/:breeder_id'}); 
     }); 
    }); 

    Catapp.IndexRoute = Ember.Route.extend({ 
     redirect: function(){ 
      this.transitionTo('breeders.index'); 
     } 
    }); 

    Catapp.BreedersIndexRoute = Ember.Route.extend({ 
     model: function(){ 
      return this.store.find('breeder'); 
     } 
    }); 

    Catapp.BreedersShowRoute = Ember.Route.extend({ 
     model: function(){ 
      return this.store.find('breeder', params.breeder_id); 
     } 
    }); 

.

// breeders_controller.js 
Catapp.BreedersController = Ember.ArrayController.extend({ 
    sortProperties: ['id'] 
}); 

Antwort

14

Sie müssen, um tatsächlich das Argument an den Haken Modell hinzufügen

Catapp.BreedersShowRoute = Ember.Route.extend({ 
    model: function(params){ 
     return this.store.find('breeder', params.breeder_id); 
    } 
}); 

Sie können es nennen, was Sie wollen auch

Catapp.BreedersShowRoute = Ember.Route.extend({ 
    model: function(foo){ 
     return this.store.find('breeder', foo.breeder_id); 
    } 
}); 
+0

Für diejenigen, die hierher kamen und realisiert diese funktioniert nicht für sie, es ist wahrscheinlich, weil Sie nicht in der "Index" Route für dieses Modell sind: der einzige Ort, "Params" funktioniert. Ich habe stattdessen [diese Lösung] (http://stackoverflow.com/a/20503866/1450226) verwendet. –

+0

Ich würde gerne zusätzliche Informationen zu der Antwort hinzufügen, aber ich bin mir nicht sicher, ob ich verstehe, was Sie meinen. Die Parameter werden basierend auf der Position des ': foo 'im Router bevölkert. – Kingpin2k

+0

Wenn Sie auf der URL '/: foo' params sind, enthält Daten. Aber sobald Sie irgendwo verschachtelt sind, enthält '/: foo/edit' params nichts. Ich musste auf die ': foo' ID von einer verschachtelten Route zugreifen. –