Ember.js ArrayController在删除记录时未更新

Ember.js ArrayController在删除记录时未更新,ember.js,ember-data,Ember.js,Ember Data,使用ember data 1.0.0-beta.5,并具有以下路由和路由器 App.Router.map(function () { this.resource('users', function () { this.route('new'); }); this.resource('user', { path: '/user/:id' }, function () { this.route('edit');

使用ember data 1.0.0-beta.5,并具有以下路由和路由器

 App.Router.map(function () {
      this.resource('users', function () {
            this.route('new');
      });
      this.resource('user', { path: '/user/:id' }, function () {
          this.route('edit');
      });
  });

App.UsersIndexRoute = Ember.Route.extend({
    model: function(){
        return this.store.findAll('user');
     },
     setupController: function (controller, data) {
         this._super(controller, data);
     }
 });

 App.UserEditRoute = Ember.Route.extend({
     model: function() {
         return this.store.find('user', this.modelFor("user").id);
     },
     setupController: function (controller, data) {
         this._super(controller, data);
      },
      actions: {
          delete: function(){
              var router = this;
              var model = this.currentModel;
                    model.destroyRecord().then(function(){
                        router.transitionTo('users');
                    });

                }

            }
    });

但是,当我转换回用户路由时,ArrayController中仍然包含已删除的对象。关于为什么会这样,或者如何等到它被删除后再转换,您有什么想法吗?

在您的情况下,因为您想重新访问所有用户,而您的服务器在删除记录方面对您撒谎(或者稍后会发生),您可能会考虑先转换然后删除

delete: function(){  
   var model = this.currentModel;
   this.transitionTo('users').then(function(){
     model.destroyRecord();
   });
}

这是一种解决方法,但解决了问题

在UsersIndexController中,添加一个数组来存储删除的ID

App.UsersIndexController = Ember.ArrayController.extend({
   deleted: []
});
然后只需将已删除模型的id附加到此数组,并在setupController方法中进行筛选

 App.UsersEditRoute = Ember.Route.extend({
     delete: function(){
          var router = this;
          var model = this.currentModel;
          var usersController = this.controllerFor('users.index');

          model.destroyRecord().then(function(){
               usersController.get('deleted').push(model.id);
               router.transitionTo('users');
           });

       }

    }
 });

App.UsersIndexRoute = Ember.Route.extend({
   setupController: function (controller, data) {
      var deleted = this.controller.get('deleted');
      var filtered = data.filter(function(user){
          return  !deleted.contains(user.id);
      });
     data.set('content', filtered);
     this._super(controller, data);
   }
 });

它真的被从服务器上删除了吗?是的。但是,我有一个返回用户对象的弹性索引。我能想到的唯一一件事是,它从索引中删除并在/users调用中返回时会有一个延迟。我也曾怀疑过,当您再次点击路由时,您希望捕获新用户,还是这不重要?我想捕获任何新用户。但我认为我的实现可以处理这个问题吗?是的,可以,我只是想知道这是否是你的意图(重新访问所有用户)。这仍然不能解决问题,因为/users调用将返回已删除的对象,但它仍然不会被删除,你将转换到用户,它将获取新用户,然后删除该用户,然后它将从列表中删除。在我的情况下,这仍然不能解决问题。请参阅下面我的解决方案。