2017-08-11 1 views
0

Ich bin flummoxed. Ich habe das funktioniert, aber ich habe keine Ahnung warum. Hier ist die Einrichtung ... Der Service, gestrippt ...Logik für, wenn 'diese' von Komponente zu Service gültig ist

export default Ember.Service.extend({ 
    editableCat: null, 
    saveCatChanges() { 
     var editCat = editableCat; 
this.get('editstate').saveJournalChanges(); 
... 

Der Anrufer, der Bestandteil Aktivität ist ... Import Ember von 'Ember';

export default Ember.Component.extend({ 
    editstate: Ember.inject.service('edit-state'), 
    actions: { 
     createCat() { 
      WORKS this.get('editstate').saveCatChanges(); 
      FAILS Ember.get(this.get('editstate'), 'saveCatChanges') 

     } 
    }    
}); 

Die "FAILS" -Version hat keine Definition für "dies", wenn es zum Dienst kommt. "Ja wirklich?" Es sind also keine "saveCatChanges" definiert und Ausnahmen sind ausgeschlossen. Aber der gleiche Code im Service, der mit der WORKS-Variante aufgerufen wird, hat ein "das" und alles ist gut.

Warum? Hä? Und der einzige Grund, warum ich das aufgespürt habe, war die pure Frustration beim Versuch, es zu dokumentieren, also, was?

Bitte helfen Sie mir zu verstehen. Ember verwirrt mich, wenn ich foo.bar vs Ember.get (das, 'foo'). Bar vs Ember.get (das, Ember.get (das, 'foo'), 'bar), aber das ist besonders unerwartet.

Antwort

0
WORKS this.get('editstate').saveCatChanges(); 

Dies funktioniert, weil Sie die editstate Objekt erhalten und den Aufruf der Funktion saveCatChanges Funktion.

FAILS Ember.get(this.get('editstate'), 'saveCatChanges') 

Es ist nicht fehlgeschlagen.Es macht Arbeit beim Abrufen der Eigenschaft. aber du hast es nicht aufgerufen.

Ember.get(this.get('editstate'), 'saveCatChanges')() entspricht this.get('editstate').saveCatChanges()

Hier ist das, was ist Ihr Motto ?. Ember.get wird verwendet, um die Eigenschaft aus dem Objekt, das Sie im ersten Parameter senden, abzurufen. In deinem Fall versuchst du eine Funktion zu bekommen, die nicht ideal ist. Sie müssen dazu Ember.get nicht verwenden.

Ember.get verwendet this.get im Backend. beide sind gleich. Ember.Object hat get/set-Methode, normale Ebene Objekt wird nicht/set-Methode erhalten, in diesem Fall wir Ember.get/Ember.set

  1. foo.bar verwenden können -> Dont verwenden. Verwenden Sie immer die get/set-Methode.
  2. Ember.get(this, 'foo').bar -> wenn foo ist Ember Objekt, dann this.get('foo').get('bar') oder Ember.ger(this,'foo.bar').
  3. Ember.get(this,Ember.get(this, 'foo'),'bar) -> das ist falsch, zweites Argument sollte der Name der Eigenschaft sein, aber Sie liefern das Objekt. und es wird nicht thrid Parameter akzeptieren (Ember.set akzeptiert drei Parameter)

Siehe diese Antwort- difference-between-ember-get-and-this-get

Siehe:. https://emberjs.com/api/ember/2.14/namespaces/Ember/methods/get?anchor=get

Verwandte Themen