Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ember.js 如何在请求API后刷新模型_Ember.js_Model_Refresh - Fatal编程技术网

Ember.js 如何在请求API后刷新模型

Ember.js 如何在请求API后刷新模型,ember.js,model,refresh,Ember.js,Model,Refresh,请求后我被阻止了,我需要刷新我的模型,但我必须执行cmd+R来查看更改,是否有方法重新调用模型或类似的方法 我添加了其他可能有帮助的内容您可以使用model.reload从服务器刷新记录: 或者您可能要删除本地记录: 或者,您可能希望使用model.destroyRecord让Ember执行删除请求(远程+本地): 我认为最好使用model.destroyRecord,但我认为手动执行此操作是有原因的?我可以想到两种方法。第一种方法是在路线上给司机打电话。这是迄今为止最简单的。只要调用它,

请求后我被阻止了,我需要刷新我的模型,但我必须执行cmd+R来查看更改,是否有方法重新调用模型或类似的方法


我添加了其他可能有帮助的内容

您可以使用model.reload从服务器刷新记录:

或者您可能要删除本地记录:

或者,您可能希望使用model.destroyRecord让Ember执行删除请求(远程+本地):


我认为最好使用model.destroyRecord,但我认为手动执行此操作是有原因的?

我可以想到两种方法。第一种方法是在路线上给司机打电话。这是迄今为止最简单的。只要调用它,Ember就会为该路由和任何子路由重新调用
模型
钩子。在您的情况下,我将从您的控制器向您的路由发送一个操作,然后让您的路由在该操作处理程序中刷新自身

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

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

然而,我不推荐这种方法。在处理Ember路由时有太多的变量,只让Ember处理这些变量更容易。

您的模型是什么样子的?您使用的是Ember数据吗?我没有使用Ember数据,只是我的路由带有一个api请求
return new Ember.RSVP.hash({logs:Ember.$.ajax({url:this.get('url'),headers:{“X-api-Token”:data.auth_token},键入:'GET'}),)}
只要我这样做@GJK@albertjan
deleteRecord()
将记录标记为稍后在服务器上删除,而
destroyRecord()
则从服务器上完全删除记录。这两个都不能解决他的问题。另外,他没有使用余烬数据,所以他不能使用任何这些。非常感谢您的时间!!!但我知道我做得很糟糕,只是我在学习Ember@GJKi不知道:D如果删除某些内容后需要在控制器函数中调用该函数,你会怎么做?你会想在控制器上使用,并将其气泡带到路线上,然后在那里捕捉它。您可以阅读更多有关操作的信息。
// route.js
actions: {
    refreshModel: function() {
        var route = this;
        Ember.$.ajax({ ... }).then(function(data) {
            route.get('controller').set('model', data);
        });
    }
}