如何在请求 API 后刷新模型
How to refresh a model after a request to API
//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 才能看到更改,是否有重新调用模型或类似方法的方法?
我添加了一些可能有帮助的东西
您要么想使用 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,但我认为您手动执行此操作是有原因的?
我能想到的有两种方法。第一个是在路由上调用 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 处理它会更容易。
//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 才能看到更改,是否有重新调用模型或类似方法的方法?
我添加了一些可能有帮助的东西
您要么想使用 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,但我认为您手动执行此操作是有原因的?
我能想到的有两种方法。第一个是在路由上调用 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 处理它会更容易。