2015-03-30 58 views
2
//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看到的变化,有没有一种方法,调用模型或类似的东西?如何刷新模型后请求API

我已经添加了另一件事也许有助于

+0

你的模特看起来像什么? – albertjan 2015-03-30 17:48:34

+0

您使用Ember-Data吗? – GJK 2015-03-30 18:42:45

+0

我没有使用Ember-Data,只是我有一个API请求返回新Ember.RSVP.hash({0128]。 '),头文件:{“X-Api-Token”:data.auth_token},输入:'GET'}),' }}'只是我这么做@GJK @albertjan – Rojke 2015-03-30 19:13:42

回答

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处理所有事情更容易。

+0

非常感谢你的时间!但我知道我这样做不好,只是我正在学习Ember @GJK – Rojke 2015-03-30 20:08:30

+0

我不知道:D如果你需要在删除某些东西后调用控制器函数中的那个函数,你该怎么做? – Rojke 2015-03-30 21:20:30

+0

您需要在控制器上使用[发送方法](http://emberjs.com/api/classes/Ember.Controller.html#method_send),并让它到达路由并将其捕获。你可以阅读更多关于行动[这里](http://guides.emberjs.com/v1.10.0/templates/actions/)。 – GJK 2015-03-30 21:23:01

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让灰烬做删除请求(远程+本地): http://emberjs.com/api/data/classes/DS.Model.html#method_destroyRecord

我认为这将是最好的使用model.destroyRecord,但我认为你有这样做的原因手动?

+0

'deleteRecord()'标记删除记录稍后在服务器上,而'destroyRecord()'完全从服务器删除记录。这些都不能解决他的问题。另外,他没有使用Ember-Data,所以他不能使用任何这些。 – GJK 2015-03-30 19:49:27