2012-12-11 49 views
1

我有一個基本的路由器的帖子索引和顯示操作。如果我導航到單個帖子,它會正確呈現頁面並將URL設置爲/#/posts/foo。但是,如果我複製URL並將其粘貼到新標籤中,它將加載頁面,但URL將更改爲/#/posts/null。除此之外,在頁面呈現正確並且沒有錯誤顯示Ember反序列化破解URL爲空

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 
    }) 
}); 
+0

我覺得你的'反序列化'函數工作不正常。不知道問題是什麼,但我會在稍後再回來。 – mehulkar

回答

0

問題被指定id作爲attrirbute做的工作。你永遠不應該這樣做,讓Ember Data自動處理它。

App.Post = DS.Model.extend({ 
    title: DS.attr("string"), 
    content: DS.attr("string"), 
    image: DS.attr("string") 
}); 
2

你的路線應該是'/ post /:post_id'而不是'post /:id'。參數名稱由非資本化模型名稱,下劃線和屬性名稱組成。

做這樣你不需要序列化/反序列化方法,Ember.js會爲你

+0

原來你是對的。如果我放了'/ post /:post_id',我不必再使用序列化,但如果我重新加載頁面,它仍然會替換爲null。 –