0
votes

I've followed this example http://emberjs.com/guides/controllers/dependencies-between-controllers/ to implement a nested resource for my app but continue to receive route and type errors.

I've created my route as follows:

App.Router.map(function () {
  this.resource('logs', {path: '/'}, function(){
    this.resource('log', {path:'/logs/:log_id'}, function(){
      this.resource('triggers');
    });
  });
});

My controller:

App.TriggersController = Ember.ArrayController.extend({
    needs:"log"
});

Model:

App.Log = DS.Model.extend({
    name: DS.attr('string'),
    type: DS.attr('string'),
    messages: DS.attr('string'),
    triggers: DS.hasMany(App.Trigger, {async:true})
});

Child Model:

App.Trigger = DS.Model.extend({
    name: DS.attr('string'),
    pattern: DS.attr('string'),
    isEnabled: DS.attr('boolean'),
    colour: DS.attr('string'),
    highlightText: DS.attr('boolean'),
    invertContrast: DS.attr('boolean')
});

JSFiddle link : http://jsfiddle.net/WZp9T/11/

Click on one of the links and you should see the error in console.

("Error while loading route: TypeError {}" and "Uncaught TypeError: Cannot read property 'typeKey' of undefined" as well as a deprecation warning)

Basically, what I'm trying to achieve is:

Logs -> Log -> Log Triggers -> Trigger

Each context should remain on screen, where exactly am I going wrong?

EDIT: It seems to be a problem with this:

App.LogIndexRoute = Ember.Route.extend({
  model: function (params) {
    return this.store.find(params.log_id);
  }
});

If I remove that piece of code I no longer receive my errors.

1

1 Answers

0
votes

You need to tell the store which kind of object you want to look up. Right now you're just passing it an ID. This is probably what you're looking for:

App.LogIndexRoute = Ember.Route.extend({
  model: function (params) {
    return this.store.find('log', params.log_id);
  }
});