2014-03-25 67 views
0

我正在製作基於pattern below from Robin Ward [video/15sec] 的自定義解析器,這是讓移動設備在加載「模板之前首先查找」mob_template.hbs「的技巧。哈佛商學院的」使用Ember-App-Kit擴展EmberDefaultResolver

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

但是我使用Ember App Kit,它使用resolver的一個特殊版本:

我真的不能告訴發生了什麼事在那裏或什麼,我需要做的,以產生類似功能。任何人有任何想法?

我已經試過這樣的事情,但它會導致沒有得到解決:

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); 
      }, 
    }) 
}); 

回答

1

顯然parsedName是不是在EAK解析器模板名稱的字符串,它代表了模板名稱雖然有些道具,parsedName.fullNameWithoutType是目標對象之一:

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 });