Search code examples
ember.jsember-app-kit

extending EmberDefaultResolver with Ember-App-Kit


I'm making a custom resolver based on the pattern below from Robin Ward [ video / 15sec] which is a trick to have a mobile device look for "mob_template.hbs" first before loading "template.hbs"

App.Resolver = EmberDefaultResolver.extend({
  resolveTemplate: function(parsedName){
    var t = this._super(parsedName);
    if App.mobileActive){
        return this._super('mob_' + parsedName) || t;
    }
    return t;
  }
});

However I'm using Ember App Kit, which uses a special version of the resolver:

I can't really tell what's going on in there or what I would need to do to produce similar functionality. Anyone have any idea?

I've tried something like this but it results in nothing being resolved:

var App = Ember.Application.extend({
  //...
  Resolver: Ember.DefaultResolver.extend({
          resolve: function(fullName) {
            var parsedName = this.parseName(fullName),
                resolveMethodName = parsedName.resolveMethodName;

            if (!(parsedName.name && parsedName.type)) {
              throw new TypeError("Invalid fullName: `" + fullName + "`, must be of the form `type:name` ");
            }
            if (this[resolveMethodName]) {
              if (window.screen_type == 'mobile'){
                var resolved = this[resolveMethodName](parsedName + '_mobile');
              } else{
                var resolved = this[resolveMethodName](parsedName);
              }
              if (resolved) { return resolved; }
            }
            return this.resolveOther(parsedName);
          },
  })
});

Solution

  • Apparently parsedName is not a string of the template name in the EAK resolver, it has some props representing the template name though, parsedName.fullNameWithoutType being the one to target:

    var CustomResolver = Resolver.extend({
        resolveTemplate: function(parsedName){
          var resolve = this._super(parsedName);
          if (['foo','bar'].indexOf(window.special_prop) > -1){
            var orig__parsedName_name = parsedName.name;
            parsedName.name = parsedName.name + '_' + window.special_prop;
            parsedName.fullName = parsedName.fullName + '_' + window.special_prop;
            parsedName.fullNameWithoutType = parsedName.fullNameWithoutType + '_' + window.special_prop;
            resolve = this._super(parsedName) || resolve;
          }
          return resolve;
        } });
    
    
    var App = Ember.Application.extend({   //...   Resolver: CustomResolver });