如何在请求API后刷新模型

时间:2015-03-30 17:35:37

标签: ember.js model refresh

//Route 
url:  "https://xxxxxx.com/api/entries",
users: "https://xxxxxx.com/api/users/",
model: function(){
    var localData = JSON.parse(localStorage.getItem("user"));
    var data = { auth_token: localData.user_token };
    return new Ember.RSVP.hash({
        logs: Ember.$.ajax({ url:  this.get('url'), headers: { "X-Api-Token": data.auth_token } }),
        team: Ember.$.ajax({ url: this.get('users'), headers: { "X-Api-Token": data.auth_token } })
    }); 
}


//controller
actions:{
    deleteWorklog: function( worklogId ){
          var model = this.get('model.logs');
          var data = { auth_token: this.get('local_data').user_token };
          Ember.$.ajax({
               method: "DELETE",
               url: this.get('url') + "/" + worklogId,
               headers: { 'X-Api-Token': data.auth_token }
          }).then(function(data){
             //how do i do it?
          })
    },
   loadMore: function(){
        var model = this.get('model.logs');
        var url = this.get('url');
        var today = new Date();
        today.setDate(today.getDate() - this.get('from'));
        console.log(today);

        url += "?from="+ today.toISOString();

        Ember.$.ajax({ 
            url: url,
            headers: { "X-Api-Token": data.auth_token } 
         }).then(function(data) { 
            model.replace(0, model.length, data); 
         });

        var initial = this.get('from') + 10;
        this.set('from', initial);
    }
}
}

我在请求后被阻止,我需要刷新我的模型,但是我要做cmd + R来查看更改,是否有方法重新调用模型或类似的东西?< / p>

我已经添加了其他可能有帮助的东西

2 个答案:

答案 0 :(得分:1)

我能想到两种方式。第一种是在路线上呼叫refresh method。这是迄今为止最简单的。只需调用它,Ember将重新调用该路由的model挂钩和任何子路由。在您的情况下,我会从您的控制器向您的路线发送一个动作,然后让您的路线在该动作处理程序中刷新。

第二种方法是手动重新获取数据并将其设置在控制器上。也许是这样的:

// route.js
actions: {
    refreshModel: function() {
        var route = this;
        Ember.$.ajax({ ... }).then(function(data) {
            route.get('controller').set('model', data);
        });
    }
}

但是,我不推荐这种方法。处理Ember路由时有太多变量,让Ember处理这一切变得更容易。

答案 1 :(得分:0)

您要么使用model.reload从服务器刷新记录: http://emberjs.com/api/data/classes/DS.Model.html#method_reload

或者您可能想要删除本地记录: http://emberjs.com/api/data/classes/DS.Model.html#method_deleteRecord

或者您可能希望使用model.destroyRecord让Ember执行删除请求(远程+本地): http://emberjs.com/api/data/classes/DS.Model.html#method_destroyRecord

我认为使用model.destroyRecord是最好的,但我认为你有理由手动执行此操作吗?