samedi 9 mai 2015

Access user from session data and save to an existing list - Ember

I'm trying to access the user data from session and add user as a child record to an existing list. "countMe" action gives this error:

Uncaught Error: Cannot set read-only property "list" on object

I'd love to know what's being done wrong here!

Route:

    countMe: function() {

        var list = this.modelFor(this.routeName);

        var user = this.store.createRecord('user', {
            list: list
        });

        user.save().then(function(user) {
            list.get('users').addObject(user);
            list.save();
        });
    },

Initializer:

import Ember from 'ember';
import Firebase from 'firebase';


function parseAuthData(authData) {
    var parsedData = {};
    switch(authData.provider) {

        case 'facebook':
            parsedData.provider = authData.provider;
            parsedData.id = authData.facebook.id;
            parsedData.displayName = authData.facebook.displayName;
            parsedData.gender = authData.facebook.cachedUserProfile.gender;
            parsedData.language = authData.facebook.cachedUserProfile.locale;
            parsedData.imageThumbUrl = authData.facebook.cachedUserProfile.picture.data.url;
            parsedData.website = authData.facebook.cachedUserProfile.link;
            return parsedData;
    }
}



var session = Ember.Object.extend({
    ref : new Firebase("http://ift.tt/1Ero3IY"),

    addFirebaseCallback: function() {
        var session = this;
        var ref = this.get('ref');

        ref.onAuth(function(authData) {
            if (authData) {
                var user = parseAuthData(authData);
                session.set("isAuthenticated", true);
                session.set('uid', authData.uid);
                session.set('user', user);
                ref.child('users').child(authData.uid).set(user);

            } else {
                session.set("isAuthenticated", false);
            }
        });
    }.on("init"),


    loginFacebook: function() {
        var session = this;
        return new Ember.RSVP.Promise(function (resolve, reject) {
            session.get("ref").authWithOAuthPopup("facebook", function(error, user) {
                if (user) {
                    resolve(user);
                } else {
                    reject(error);
                }
            },

            {
                remember: "sessionOnly",
                scope: "email"
            });
        });
    },
    currentUser: Ember.computed('isAuthenticated', function() {
        return this.get('ref').getAuth();
    })

});

export default {
    name: "Session",

    initialize: function (container, app) {
        app.register("session:main", session);
        app.inject("controller", "session", "session:main");
        app.inject("route", "session", "session:main");
    }
};




Aucun commentaire:

Enregistrer un commentaire