当我请求返回404(或403)的单个资源时,Ember Data正在创建本地记录。
例如,我在/items/123
处从头开始加载我的应用。适配器请求GET /items/123
,这会产生404,但现在我的本地商店中有item
记录id=123
。所有属性都是undefined
期望模型定义默认值的位置。
此外,所有模型标记均为false
,isValid
除外true
。
这是例外行为吗?即使服务器说它不存在(或者不允许用户看到它),本地记录也会被创建,这似乎很奇怪。
我正在运行Ember 1.8.1 和Ember Data 1.0.0-beta.11 。
这就是我对路线的基本要求:
// itemsRoute, TOP LEVEL
model: function() {
return this.store.find('item');
}
// itemRoute, CHILD LEVEL
model: function(params) {
return this.store.find('item', params.item_id); // <-- this returns 404
},
actions: {
error: function(err) {
this.replaceWith('items'); // jump out to main list view
return true; // ensure error bubbles up
}
}
model
挂钩中的拒绝正常,因为error
操作已触发,我已重定向到顶级/items
视图。但我仍然最终得到了item
不存在的本地记录。
答案 0 :(得分:0)
在考虑了这个之后......尝试改变itemRoute中的错误处理程序来自...
actions: {
error: function(err) {
this.replaceWith('items'); // jump out to main list view
return true; // ensure error bubbles up
}
}
为...
actions: {
error: function(err) {
this.transitionTo('items'); // jump out to main list view
return false; // Stop event bubbling - we've handled it.
//You could also console.log parts or all of your error
//You can return true too if you want to keep the event bubbling.
}
}
我没有具体理由说明为什么会这样。如果有效,请等待您的回复。
答案 1 :(得分:0)
这绝对是一个错误。这似乎在一段时间后得到了解决,但正如3月14日的更改所重新引入的那样。