2016-06-12 18 views
0

Schnell und kurz Ich habe folgendes Problem:Ember - In der Aktion ist das Ergebnis definiert, der Rückgabewert derselben Aktion, die in der übergeordneten Aktion protokolliert wurde, ist nicht definiert? Warum?

Ich habe folgende zwei Aktionen innerhalb einer Komponente in Ember:

createData: function(user) { 
    let collection = []; 
    for (let i = 0; i < user.posts.length; i++) { 
     let data = this.send('createSingleData',user.posts[i], user, 'post'); 
     console.log(data); 
     collection.push(data); 
    } 
    return collection; 
}, 
createSingleData: function(data, user, type) { 
    let entitySkeleton = { 
      name: data.place.name, 
      belongsTo: user.id, 
      position: { 
       data.place.location.longitude, 
       data.place.location.latitude 
      } 
     }; 
    console.log(entitySkeleton); 
    return entitySkeleton; 
} 

das erste Protokoll - innerhalb createSingleData, direkt vor der protokollierten Wert zurück - schreibt die entitySkeleton als Objekt in die Konsole - wie erwartet.

Allerdings schreibt die console.log (Daten) - innerhalb createData - 'undefined' auf die Konsole.

Gibt es irgendeinen Aspekt der Asynchronität, den ich nicht respektiert habe?

S.S .: Ich habe auch alle Parameter innerhalb createSingleData protokolliert, sie sind alle richtig eingestellt. Die Variablensammlung wird auch nur 'undefiniert' verschoben.

Antwort

0

Sie können den Wert nicht aus der Aktion zurückgeben, stattdessen können Sie die Eigenschaft aus der Aktion auswählen.

how to return values from actions in emberjs

actions: { 
    PrintSomething: function() { 
     let obj = [{a: 'raj'}, {a: 'Prudvi'}, {a : 'thimappa'}]  
     console.log('before', obj); 
     this.send('returnSomething', obj); 
     console.log('after calling action', this.get('returnvalue')); 
    }, 

    returnSomething: function(obj) { 
     obj.push({a: 'FSDFSDF'}) 
     var data = obj; 
     this.set('returnvalue', data); 
    } 
} 
+0

Mein Problem bei dieser Lösung ist, dass ich mehrere Aktionen haben, die Berechnungen durchführen und deshalb brauche ich einen Wert zurückgeben. – dagopert

+0

Gibt es eine Möglichkeit, eine JavaScript-Funktion zu definieren, die Werte außerhalb einer Aktion zurückgeben kann, auf die in allen Aktionen zugegriffen werden kann? – dagopert

+0

können Sie createSingleData als JavaScript-Funktion in einer separaten js-Datei schreiben und diese Datei importieren, und dann createSingleData aufrufen, die Daten zurückgibt. –