Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 余烬反序列化中断URL,为null_Javascript_Ember.js_Ember Data - Fatal编程技术网

Javascript 余烬反序列化中断URL,为null

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("

我有一个基本的路由器的职位索引和显示行动。如果我导航到一篇文章,它会正确呈现页面并将URL设置为
/#/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。