Ember-data - “在状态root.deleted.saved中尝试在* record *上处理事件`deleteRecord`。”

时间:2014-06-05 22:38:03

标签: ember.js

我尝试在我的应用中使用ember-data管理关注者/关注关系。我遇到了一个问题,如果用户点击开启/关闭ember抛出"尝试在状态root.deleted.saved中处理事件deleteRecord。"有没有人遇到过这个?

以下行动代码

    actions: {
    follow: function(model){
        var component = this;
        var store = this.get('targetObject.store');
        var session = this.get('targetObject.session');
        this.set('isFollowed', true)

        /* Follower Side */
        Ember.RSVP.hash({
            profile: store.find('profile', model),
            follower: session.get('currentUser.profile')
        }).then(function(rsvp){

            var follower = store.createRecord('follower', {
                profile: rsvp.profile,
                follower: rsvp.follower,
                status: 'approved'
            });


            var followed = store.createRecord('followed', {
                profile: rsvp.follower,
                followed: rsvp.profile,
                status: 'approved'
            });

            followed.save().then(function(savedFollowed){
                rsvp.follower.get('followeds').addObject(savedFollowed);                    
            });
            follower.save().then(function(savedFollower){
                rsvp.profile.get('followers').addObject(savedFollower);
            });


        })
    },

    unfollow: function(model){
        var component = this;
        var store = this.get('targetObject.store');
        var session = this.get('targetObject.session');

        this.set('isFollowed', false)

        /* Remove Follower Side */
        component.set('isFollowed', false)
        Ember.RSVP.hash({
            profile: store.find('profile', model),
            follower: session.get('currentUser.profile')
        }).then(function(rsvp){

            /* Delete Follower Side */

            var follower_id = rsvp.follower.get('id');
            rsvp.profile.get('followers').forEach(function(item){
                if(follower_id == item.get('followLink')){                        
                    item.destroyRecord();
                }
            })

            var profile_id = rsvp.profile.get('id');

            rsvp.follower.get('followeds').forEach(function(item){
                if(profile_id == item.get('followLink')){                        
                    item.destroyRecord();
                }
            })
        })
    }  
}

更新

我解决了这个问题 - 谢谢GJK的回复。对于那些遇到这个问题的人 - 因为我将记录添加到父模型" hasMany"关联手动使用" addObject" - 当我删除记录时,我还需要将其从该关系中删除,以便它不会存在于父母和#34; hasMany"这又出现在删除循环中。长话短说,解决方案是添加' removeObject(item)'即...

item.destroyRecord(); 
rsvp.follower.get('followeds').removeObject(item);

item.destroyRecord();
rsvp.profile.get('followeds').removeObject(item)                        

1 个答案:

答案 0 :(得分:7)

root.deleted.saved表示您的模型已被删除,并且更改已持久保存到服务器。我的猜测是followersfolloweds是不一定不相交的用户集。