2017-02-26 8 views
0

ログイン後のデータをストアに保存しようとしています。以下は、私が取得しています私の鳥居・アダプターのコードemerのtorii-adapterで "this"が定義されていません

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 
     }; 
    }); 
    } 

}); 

エラーは、「例外TypeError:未定義の 『SET』プロパティを読み取ることができません」です。 私は店舗サービスも注入しています。ここで何が間違っているのか教えてください。

+0

あなたが 'ember-cli'にいるので、私はあなたに矢印関数を使うことをお勧めします。これは' this'コンテキストをオーバーライドしません。私は、JSでの「これ」がどのように働いているのか、なぜ矢印機能を持っているのかをあなた自身に知らせることをお勧めします。また、手動で最初の約束事を作成する必要はありません。 'Ember。$。ajax'の結果を返し、' Ember.RSVP.resolve() 'を使用してください。 – Lux

答えて

0

は現在のコンテキストでは定義されていません。それを別の変数に割り当てます。

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 
     }; 
    }); 
    } 

さらなる理解を得るためにして(例えば脂肪矢印またはバインド方法など)さまざまなオプションを確認するためには、this questionを見ています。

0

もう1つの方法は、他の別の変数thisを割り当てる必要がないように、ES6矢印関数を使用することです。

open: function(authentication){ 
    let authorizationCode = authentication.authorizationCode; 
    let token = createToken(); 
    let that = this; 
    return new Ember.RSVP.Promise((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((data) => { 
     let user = data.user[0]; 
     that.set('storage.token',token); 
     return { 
     user: user 
     }; 
    }); 
    } 

Ember-cliは、ES6からES5に変換して、ほとんどのブラウザで互換性を持たせるのに役立ちます。

関連する問題