Javascript 余烬反序列化中断URL,为null
我有一个基本的路由器的职位索引和显示行动。如果我导航到一篇文章,它会正确呈现页面并将URL设置为Javascript 余烬反序列化中断URL,为null,javascript,ember.js,ember-data,Javascript,Ember.js,Ember Data,我有一个基本的路由器的职位索引和显示行动。如果我导航到一篇文章,它会正确呈现页面并将URL设置为/#/posts/foo。但如果我复制URL并将其粘贴到新选项卡中,它将加载页面,但URL将更改为/#/posts/null。除此之外,页面被正确呈现并且没有显示错误 show: Em.Route.extend({ route: "/post/:id", serialize: function(router, context) { return { id: context.get("
/#/posts/foo
。但如果我复制URL并将其粘贴到新选项卡中,它将加载页面,但URL将更改为/#/posts/null
。除此之外,页面被正确呈现并且没有显示错误
show: Em.Route.extend({
route: "/post/:id",
serialize: function(router, context) {
return { id: context.get("id") };
},
deserialize: function(router, context) {
return App.get("store").find(App.Post, context.id);
},
connectOutlets: function(router, context) {
router.get("applicationController").connectOutlet("body", "post", context);
}
})
用一个简单的模型
App.Post = DS.Model.extend({
id: DS.attr("string"),
title: DS.attr("string"),
content: DS.attr("string"),
image: DS.attr("string")
});
日志是这样的
STATEMANAGER: Entering root ember.js:17420
STATEMANAGER: Sending event 'navigateAway' to state root. ember.js:17172
STATEMANAGER: Sending event 'unroutePath' to state root. ember.js:17172
STATEMANAGER: Sending event 'routePath' to state root. ember.js:17172
STATEMANAGER: Entering root.show
还有一个路由器
App.Store = DS.Store.extend({
revision: 4,
adapter: DS.RESTAdapter.create({
bulkCommit: false
})
});
您的路线应该是“/post/:post\u id”,而不是“post/:id”。参数名由无头模型名、下划线和属性名组成
通过这种方式,您不需要序列化/反序列化方法,Ember.js将为您完成这项工作问题是将
id
指定为属性。您永远不应该这样做,让余烬数据自动处理它
App.Post = DS.Model.extend({
title: DS.attr("string"),
content: DS.attr("string"),
image: DS.attr("string")
});
我认为您的
反序列化
函数工作不正常。我不确定问题出在哪里,但我稍后会再讨论这个问题。事实证明你是对的。如果我把/post/:post_id
放进去,我就不必再使用serialize,但是如果我重新加载页面,它仍然会替换为null。