2014-06-05 6 views
13

Próbuję używać danych ember w mojej aplikacji do zarządzania zależnościami/obserwacjami. Występuje problem polegający na tym, że jeśli użytkownik natrafi na włączanie/wyłączanie, ember generuje komunikat "Próba obsłużenia zdarzenia deleteRecord w stanie root.delleted.saved." Ktoś się w to kiedyś znalazł?Ember-data - "Próba obsłużenia zdarzenia` deleteRecord` na * rekordzie * podczas gdy w stanie root.deleted.saved. "

kod Action poniżej

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

UPDATE

I rozwiązany - dziękuję GJK na odpowiedź. Dla tych, którzy napotkali ten problem - ponieważ dodawałem rekord do modelu macierzystego relacji "hasMany" ręcznie przy użyciu "addObject" - kiedy usunąłem rekord, musiałem go również usunąć z tej relacji, aby nie istniała w rodzicach "hasMany" i to pojawia się ponownie w pętli usuwania. Krótko mówiąc rozwiązanie było dodanie „removeObject (artykuł)” tj ...

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

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

Dzięki za aktualizację. –

+0

Aktualizacja naprawdę pomogła! Dzięki! – jampafoo

Odpowiedz

6

root.deleted.saved oznacza, że ​​dany model został już usunięty, a zmiany zostały utrwalone na serwerze. Domyślam się, że followers i followeds są zestawami użytkowników, które niekoniecznie są rozłączne.

+0

Problem polega na tym, że użytkownik ponownie podąża za tą osobą - to znaczy odtwarza ten rekord, a następnie przestaje go ponownie obserwować - tj. Niszczy nowo utworzony rekord - poprzednio usunięty rekord zostaje wciągnięty do pętli usuwania i zgłasza błąd. – Danny

+0

powyższą aktualizację dla lepszego rozwiązania - zorientował się dzięki wprowadzeniu GJK. – Danny

Powiązane problemy