簡體   English   中英

未定義createRecord錯誤(Firebase + Ember.js)

[英]createRecord not defined error (Firebase + Ember.js)

我想知道是否有人可以向我指出正確的方向,並幫助我解決在使用Firebases createUser方法創建用戶后嘗試用Ember.js模型添加用戶時遇到的錯誤。

更具體地說,這是我遇到的錯誤:未捕獲的TypeError:無法讀取未定義的屬性'createRecord'

App.SignUpController = Ember.Controller.extend({
needs: ['sign-in'],
needs: ['application'],
userSignedIn: false,


actions: {
    signMeUp: function() {
        var state = false;
        var controllerContext = this;
        // Create firebase user
        ref.createUser({
                email    : this.get('email'),
                password : this.get('password'),
            }, function(error, user) {
                if (error === null) {
                    console.log('User created with id', user.uid);
                    state = true;
                    controllerContext.set('userSignedIn', state);
                    console.log("State from sign-up page: "+ state);

                    console.log("Testing user.uid inside: "+user.uid);
                    var fbid = user.id;
                    controllerContext.set('user id', user.uid);

                    var newUser = this.store.createRecord('user', {
                          id: fbid,
                          email: this.get('email'),
                          password: this.get('password'),
                    });
                    newUser.save();
            } else {
                    console.log("Error creating account:", error);
            }
        }); // End createUser

        this.transitionToRoute('letters');
    }
}
 });

更新:這是經過一天的JS調試后我想到的(非常棘手的)解決方案。

App.SignUpController = Ember.Controller.extend({
needs: ['sign-in'],
needs: ['application'],
userSignedIn: false,
thisUserID: '',

actions: {
    signMeUp: function() {
        var state = false;
        var controllerContext = this;
        // Create firebase user
        function authWithPassCallback(userObj, user){
            console.log("authWithPassCallback user.uid is: "+user.uid);
            return user.uid

        }

        function createUserAndLogin(userObj, callback) {  
           ref.createUser(userObj, function(error, user) {
              if (error === null) {
                console.log("User created successfully");
                controllerContext.set('thisUserID', user.uid);
                return callback(userObj, user);

              } else {
                console.log("Error creating user:", error);
              }  
            }); 


        }

        var userAndPass = { 
            email: this.get('email'),
            password: this.get('password')}

        var fbPayload = createUserAndLogin(userAndPass, authWithPassCallback);

        setTimeout(function () { 
            console.log("FB load: "+ controllerContext.get('thisUserID'));
            var newUser = controllerContext.store.createRecord('user', {
                              id: controllerContext.get('thisUserID'),
                              email: controllerContext.get("email"),
                              password: controllerContext.get("password"),
            });
            newUser.save();
            controllerContext.transitionToRoute('letters');
       }, 1000);
        console.log(controllerContext.get('thisUserID'));

    }
}
});

我假設錯誤發生在newUser = this.store.createRecord在您的代碼中, this不再是指控制器。 您將需要使用controllerContext.store.createRecord

您可能只是在這里失去了上下文。 thiscontroller無關,您處於錯誤功能中。

有兩種解決方法。 首先是將函數綁定到控制器的this

ref.createUser({
  // ...
}, function(error, user) {
  var newUser = this.store.createRecord('user', {/*...*/});
  // ...
}.bind(this));

或重用controllerContext變量:

ref.createUser({
  // ...
}, function(error, user) {
  // ...
  var newUser = controllerContext.store.createRecord('user', {/*...*/});
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM