Ember.js - 删除模型后重新加载API中的分页列表(可能是插入)

时间:2015-04-08 11:43:53

标签: api ember.js metadata reload

我有一个来自我的REST api的分页模型列表。 我使用api的分页元数据来获取我的数据库中的记录总数,并查看是否有上一页或下一页。 如果我删除当前页面上的一条记录,我希望发生以下几件事: - 下一页的第一条记录应出现在当前页面中(如果存在)。 - 我要更新的元数据。 (总数和分页数据)

控制器上的直接transitionToRoute方法没有执行任何操作。我相信当前页面的API重新加载是可行的方法,但据我所知,它似乎没有实现。

我已经设法通过self.transitionToRoute('index')然后另一个self.transitionToRoute到我想要重新加载的页面来获得我想要的结果......这非常可怕并让我感到畏缩。必须有更好的方法!

以下是一些相关代码:

//router.js
App.Router.map(function(){
  this.resource('jobs', function(){
    this.resource('job', { path:'/:job_id' }, function(){
      this.route('edit');
    });
    this.route('create');
  });
});

//mixins.js
App.PaginatedListController = Ember.Mixin.create({
    queryParams: ['page'],
    page: 1,
    total: function(){
        return this.get('meta').count;
    }.property('meta'),
    previousAPIPage: function(){
        return this.get('meta').previous;
    }.property('meta'),
    nextAPIPage: function(){
        return this.get('meta').next;
    }.property('meta'),
    hasPreviousPage: function(){
        return this.get('previousAPIPage') ? true : false;
    }.property('previousAPIPage'),
    hasNextPage: function(){
        return this.get('nextAPIPage') ? true : false;
    }.property('nextAPIPage'),
    actions:{
        previousPage: function(){
            this.decrementProperty('page');
            this.transitionToRoute({
                queryParams: {
                    page: this.get('page')
                }
            });
        },
        nextPage: function(){
            this.incrementProperty('page');
            this.transitionToRoute({
                queryParams: {
                    page: this.get('page')
                }
            });
        },
    },
});

//controllers\jobController.js
App.JobsController = Ember.ArrayController.extend(App.PaginatedListController, {
  sortProperties: ['name'],
  sortAscending: true,
  meta: function(){
      return this.store.metadataFor('job');
  }.property('model.@each')
});

App.JobController = Ember.ObjectController.extend({
    needs: ['jobs'],
    deleteMode: false,
    actions: {
        delete: function(){
            // our delete method now only toggles deleteMode's value
            this.toggleProperty('deleteMode');
        },
        cancelDelete: function(){
            // set deleteMode back to false
            this.set('deleteMode', false);
        },
        confirmDelete: function(){
            var self = this;
            this.set('deleteMode', false);
            this.get('model').destroyRecord().then(function(response) {
                var qParams = self.get('controllers.jobs').get('queryParams');
                //This is where it hurts
                self.transitionToRoute('index');
                //This is what I want reloaded
                self.transitionToRoute('jobs', {queryParams:qParams});
            });
        },
    }
});

0 个答案:

没有答案