2016-08-09 126 views
0

Ich habe einen Ember-Adapter, und es verbindet sich mit meiner API, um Daten an die Modelle zu füttern und zu speichern. Das Problem ist die Adresse meiner API kann aus "Gründen" ändern. Wie kann ich meinen Adapter aktualisieren, damit Änderungen im Store den Host aktualisieren? Selbst wenn ich den Host ändere, wird der Adapter den neuen Host das nächste Mal verwenden, wenn er eine HTTP-Anfrage stellen muss? HierEmber Adapter Update Host

ist, was ich versucht habe ...

const ApplicationAdapter = RestAdapter.extend({ 
     namespace: 'api', 
     host: "0.0.0.0" 
    }); 

    ApplicationAdapter.reopenClass({ 
     updateHost(host) { 
      console.log("Here: " + host); 

      //Both of these throw an error probably because host is not static 
      //this.set('host', host); I attempted this first 
      //this.host = host; Then I attempted this way 
     } 
    }); 

export default ApplicationAdapter; 

Ich habe einen Beobachter, wenn die Änderungen speichern beobachtet, und ruft dann die statische Methode ApplicationAdapter.

export default Model.extend({ 
    ip1: attr('string'), 
    ip2: attr('string'), 
    ip1Observer: Ember.observer('ip1', function() { 
     let newValue = this.get('ip1'); 
     ApplicationAdapter.updateHost(newValue); 
    }), 
    ip2Observer: Ember.observer('ip2', function() { 
     let newValue = this.get('ip2'); 
     ApplicationAdapter.updateHost(newValue); 
    }) 
}); 
+0

Denken Sie daran, dass Sie modellspezifische Adapter schreiben können, wenn Sie benötigt werden. – kumkanillam

Antwort

0

Ich konnte herausfinden, wie ich mein Problem lösen kann. Ich war in der Lage, die URL des Adapters leicht zu aktualisieren, indem ich die buildURL-Funktion benutzte, und ein Dienstprogramm verwendete, um von der erforderlichen IP aus dem Speicher zu greifen. Ich brauchte keine Beobachter oder statische Attribute. Es sah so aus ...

const ApplicationAdapter = RestAdapter.extend({ 
     namespace: 'api', 
     buildURL(): function { 
      return utility.ip() + this.get('namespace'); 
     } 
});