Set multiple data with Ember and make it persist on Firebase

给你一囗甜甜゛ 提交于 2019-12-13 07:04:19

问题


I am trying to set data from two models (that has hasMany & belongsTo relationship) and save them to firebase.

'list' data ends up being saved to firebase but not user data.

I think I'm doing something wrong at step 3. I'd appreciate your help!

import Ember from 'ember';

export default Ember.Route.extend({
    model: function() {
        return this.store.find('list');
    },
actions: {
    createList: function() {
        var newListTitle = this.controllerFor('lists').get('newListTitle');
        var username = this.get('session.user.displayName');
        alert(this.get('session.user.displayName'));

        if (Ember.isBlank(newListTitle)) { return false; }

    //1
        var list = this.store.createRecord('list', {
            title: newListTitle,
            user: username,
        });

    //2
        this.controllerFor('lists').set('newListTitle', '');

        var _this = this;

    //3
            list.save().then(function(list) {
                user.get('lists').addObject(list);
                user.save();
                _this.transitionTo('lists.show', list); //4
            });

        }
    }
});

回答1:


Restructured your adding logic as well as user defined models, also modified your route, which could look like this in Edit and View mode. Meaning you can have more than one item returned from "model".

// Update models

App.List = DS.Model.extend({
     value:     DS.attr('string')
});

App.User = DS.Model.extend({
    name:   DS.attr('string')
});

App.UserLists = DS.Model.extend({
   user: DS.belongsTo('user'),
   list: DS.belongsTo('list')
});



    export default Ember.Route.extend({
        LIST:SHOW ROUTE
        model: function(params) {

            var store = this.get('store');
            var userPromise = store.find('user', params.id);

            return Ember.RSVP.hash({
                user: userPromise,
                userList : userPromise.then(function(user) {
                    return store.find(userList, { WhereUserIdIs : user.get('id') })
                });
            });
        },
    actions: {
        createList: function() {
            var self = this;

            var failure = function(reason) {
                // handle stuff
            };

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

            var user = this.get('user');

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

            list.save().then(function(list) {
                user.save().then(function() {
                    userList.save().then(function() {
                        self.transitionTo('lists.show', list.get('id'));
                    }, failure);
                }, failure);
            }, failure);

        }
    });


来源:https://stackoverflow.com/questions/29910331/set-multiple-data-with-ember-and-make-it-persist-on-firebase

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!