2015-03-30 86 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