删除记录时,ArrayController不会更新



使用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');
                    });
                }
            }
    });

但是,当我过渡到用户时,路由阵列controller仍然包含删除对象。关于为什么这是什么想法,或者如何等到过渡之前将其删除?

有点解决问题,但解决了问题。

在UsersIndexContoller中添加一个数组以存储已删除的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);
   }
 });

在您的情况下,因为您想补充所有用户,而您的服务器对删除记录(或稍后发生)对您来说,您可能会考虑过渡然后删除。

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

最新更新