Everydaypanos
Everydaypanos

Reputation: 165

Ember Router transitionTo nested route with params

App.Router.map(function() {
    this.resource('documents', { path: '/documents' }, function() {
        this.route('edit', { path: ':document_id/edit' });
    });
    this.resource('documentsFiltered', { path: '/documents/:type_id' }, function() {
        this.route('edit', { path: ':document_id/edit' });
        this.route('new');
    });
});

And this controller with a subview event that basically transitions to a filtered document

App.DocumentsController = Ember.ArrayController.extend({
    subview: function(context) {
    Ember.run.next(this, function() {
        //window.location.hash = '#/documents/'+context.id;
        return this.transitionTo('documentsFiltered', context);
    });
},
});

My problem is that this code works fine when Hash of page is changed.

But when I run the above code NOT w/ the location.hash bit and w/ the Ember native transitionTo I get a cryptic

Uncaught TypeError: Object [object Object] has no method 'slice'

Any clues?

Thanks

UPDATE:

App.DocumentsFilteredRoute = Ember.Route.extend({
model: function(params) {
    return App.Document.find({type_id: params.type_id});
},
});

{{#collection contentBinding="documents" tagName="ul" class="content-nav"}}
<li {{action subview this}}>{{this.nameOfType}}</li>
{{/collection}}

Upvotes: 2

Views: 1350

Answers (1)

mavilein
mavilein

Reputation: 11668

The problem is that your model hook is returning an array, while in your transitionTo you are using a single object. As a rule of thumb your calls to transitionTo should pass the same data structure that is returned by your model hook. Following this rule of thumb i would recommend to do the following:

App.DocumentsController = Ember.ArrayController.extend({
    subview: function(document) {
        var documents = App.Document.find({type_id: document.get("typeId")});
        Ember.run.next(this, function() {
            return this.transitionTo('documentsFiltered', documents);
        });
    }
});

Note: I assume that the type_id is stored in the attribute typeId. Maybe you need to adapt it according to your needs.

Upvotes: 5

Related Questions