1

投稿のインデックスとアクションを表示するための基本的なルーターがあります。単一の投稿に移動すると、ページが正しくレンダリングされ、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
  })
});
4

2 に答える 2

2

ルートは「post/:id」ではなく「/post/:post_id」にする必要があります。パラメータ名は、頭文字をとったモデル名、アンダースコア、および属性名で構成されます。

このようにすると、シリアル化/逆シリアル化メソッドは必要ありません.Ember.jsがあなたのために仕事をします.

于 2012-12-11T10:59:17.700 に答える
0

問題は、属性として指定idしていました。Ember Data に自動的に処理させてください。

App.Post = DS.Model.extend({
  title:   DS.attr("string"),
  content: DS.attr("string"),
  image:   DS.attr("string")
});
于 2012-12-14T19:43:26.023 に答える