2017-02-26 2 views
0

Ich versuche, einige Daten nach der Anmeldung im Shop zu speichern. Im Folgenden finden Sie Code meines Torii-Adapter"this" ist undefined in torii-adapter in ember

import Ember from 'ember'; 
import {createToken} from 'myapp/utils/app-utils'; 

export default Ember.Object.extend({ 
    store: Ember.inject.service(), 

    open: function(authentication){ 
    let authorizationCode = authentication.authorizationCode; 
    let token = createToken(); 
    return new Ember.RSVP.Promise(function(resolve, reject){ 
     console.log(authentication); 
     Ember.$.ajax({ 
     url: 'http://localhost/getUserInfoWuthAuthCode.php', 
     data: { 'code': authorizationCode,token:token}, 
     success: Ember.run.bind(null, resolve), 
     error: Ember.run.bind(null, reject) 
     }); 
    }).then(function(data){ 
     let user = data.user[0]; 
     this.set('storage.token',token); //this is undefined 
     return { 
     user: user 
     }; 
    }); 
    } 

}); 

Fehler i bin immer „Typeerror: nicht Eigentum‚set‘undefinierter lesen kann“. Ich spucke auch den Ladenservice ein. Kannst du mir bitte sagen, was genau hier schief läuft?

+0

Da Sie in 'ember-cli' sind, würde ich Ihnen empfehlen, eine Pfeilfunktion zu verwenden, die Ihren' this' Kontext nicht überschreibt. Ich empfehle Ihnen, sich zu informieren, wie 'das' in JS funktioniert und warum wir Pfeilfunktionen haben. Außerdem müssen Sie das erste Versprechen nicht manuell erstellen, sondern einfach das Ergebnis von 'Ember. $. Ajax' zurückgeben und' Ember.RSVP.resolve() 'verwenden. – Lux

Antwort

0

this ist in Ihrem aktuellen Kontext nicht definiert. Ordne es einer anderen Variablen zu.

open: function(authentication){ 
    let authorizationCode = authentication.authorizationCode; 
    let token = createToken(); 
    let that = this; 
    return new Ember.RSVP.Promise(function(resolve, reject){ 
     console.log(authentication); 
     Ember.$.ajax({ 
     url: 'http://localhost/getUserInfoWuthAuthCode.php', 
     data: { 'code': authorizationCode,token:token}, 
     success: Ember.run.bind(null, resolve), 
     error: Ember.run.bind(null, reject) 
     }); 
    }).then(function(data){ 
     let user = data.user[0]; 
     that.set('storage.token',token); //this is undefined 
     return { 
     user: user 
     }; 
    }); 
    } 

weitergehendes Verständnis zu erhalten und verschiedene Optionen (wie Fett Pfeil oder binden-Methode), haben einen Blick auf this question zu sehen.

0

Ein anderer Ansatz besteht darin, die ES6-Pfeilfunktion zu verwenden, sodass Sie this anderen anderen Variablen nicht zuweisen müssen.

Ember-cli wird Ihnen helfen, ES6 zu ES5 zu konvertieren, damit es für die meisten Browser kompatibel ist.

Verwandte Themen