Search code examples
ember.jsember-dataember-cli

How can I show actual model names when using ember-cli?


When using ember-data and ember-cli, model instances are reported in the console and browser extension (via toString() with something like <(subclass of DS.Model):ember815:1234>. How can have the actual model name be shown?


Solution

  • The resolver is aware of naming can be extended to attach properties to classes as they are resolved. Then the toString() method can be overridden on DS.Model.

    In ext/resolve-model-names.coffee

    `import Resolver from 'ember/resolver'`
    
    Resolver.reopen({
      resolve: function (fullName) {
        var parsedName = this.parseName(fullName);
        var resolved = this._super(fullName);
        if (resolved && parsedName.type === 'model') {
          resolved.typeKey = parsedName.name.camelize();
        }
        return resolved;
    });
    
    DS.Model.reopen({
      toString: function() {
        "(DS.Model) " + this.constructor.typeKey + " #" + this.get('id');
      }
    });
    

    In app.js

    import Resolver from 'ember/resolver';
    import './ext/resolve-model-names';
    
    var App = Ember.Application.extend({
      // ...
      Resolver: Resolver
    })
    

    Now you will see (DS.Model)Post#1234

    Actually my code is organized a bit differently, hopefully this is clear enough.