2016-09-29 1 views
0

Hier ist das Szenariosetzen die abhängigen Tasten einer berechneten Eigenschaft zur Laufzeit

dep = function(){ 

    cannot put any "this" here 
} 

obj = DS.Model.extend({ 
     response: DS.attr(), 
     cp: Ember.computed(dep(), function(){ ...}) 
    }); 

die berechnete Eigenschaft bekannt ist, nur nachdem das Modell geladen ist; Die Antwort ist ein JSON-Feld, das verschiedene Schlüssel enthält. Ich will die Abhängigkeit von Teilen der json, was genau Teil bekannt ist, nach dem Modell

das dep geladen wird() Funktion müßte Zugang haben, um „diese“, aber es funktioniert nicht, wenn es außerhalb der erstellen Anweisung definiert ist und es funktioniert nicht, wenn es als eine berechnete Eigenschaft entweder zum Beispiel

obj = DS.Model.extend({ 
    response: DS.attr(), 
    dep:Ember.computed('response', function(){ 
    some computation 
    and for instance 
    return 'response.path1{a,b}'; 
    }), 
    cp: Ember.computed('dep', function(){ ...}) 
}); 
definiert ist

nicht funktioniert, entweder weil dep aus ist nicht nur ‚Antwort‘ Abhängigkeit zu ändern, müssten wir die gleiche Abhängigkeit von anzuwenden cp und dep, das tautologisch ist, und dep würde nicht benötigt werden

Eine andere Sache, die n tut ot Arbeit ist

obj = DS.Model.extend({ 
      response: DS.attr(), 
      cp: Ember.computed(this.dep(), function(){ ...}), 
      dep(){ this.get('response')... } 
     }); 

So hat jemand weiß, wie die abhängigen Schlüssel einer berechneten Eigenschaft zur Laufzeit setzen, mit einer Berechnung abhängig von einer Modell-Instanz

dank

Antwort

0

In berechneter Eigenschaft abhängig Schlüssel, kann nur string oder irgendeine globale Funktion sein, die string zurückgibt, aber Sie können nicht auf this context innerhalb der Funktion zugreifen.

Ich würde empfehlen, cp von Model auf einige andere zu verschieben.

Im Modell ready-Hook können Sie eine dynamische berechnete Eigenschaft erstellen und den abhängigen Schlüssel von response festlegen.

Kann der folgende Code Ihnen helfen, Lösung zu finden. Ich habe das nicht getan, vielleicht kannst du es versuchen.

import DS from 'ember-data'; 
export default DS.Model.extend({ 
    response: DS.attr(), 
    ready() { 
     this._super(...arguments); 
     var response = this.get('response'); 
     //you can write dep() logic here and contstruct dynamic key . You will have access to this context here. 
     var newDynamicKey = 'response.path1{a,b}'; 
     Ember.defineProperty(this, 'cp', Ember.computed(newDynamicKey, function() { 
      //do your work and return result 
      return 'result'; 
     })); 
    } 
}); 
+0

Dank viel es – user2725682

+0

durch die Art und Weise gearbeitet, um Ihnen einen Funktionsaufruf anstelle des abhängigen Schlüssel der berechneten Eigenschaft setzen können sofern der Anruf keine Argumente hat und einen String zurückgibt. Ich habe es zuerst versucht und es hat funktioniert, aber als ich ein Argument für diese Funktion übergeben musste, funktionierte es nicht mehr – user2725682

+0

@ user2725682 Ja. Du hast Recht..Ich habe meine Antworten aktualisiert. Bei Bedarf überprüfen Sie bitte meine Antworten mit Ihrer implementierten Lösung. – kumkanillam

Verwandte Themen