删除记录时ArrayController不更新

时间:2014-02-01 05:37:30

标签: 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');
      });
  });

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仍然有删除的对象。关于为什么会这样或者如何等到它在转换之前被删除的任何想法?

2 个答案:

答案 0 :(得分:0)

有点解决问题但是解决了这个问题。

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

答案 1 :(得分:-1)

在您的情况下,因为您想要重新获取所有用户,而您的服务器对您来说是关于删除记录(或稍后发生),您可能会考虑转换然后删除。

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