2

私はPOCアプリを書いています.EmberライブラリをRC1にアップグレードした後、問題が発生しています. 新しいバージョンのルートに移行すると、オブジェクトの文字列化されたバージョンが URL に表示されるように見えることに気付きました...

http://localhost:3000/posts/<App.Post:ember269:511401b8c589137c34000001>

このように遷移すると、ルートは正常に機能しますが、明らかにそのような URL に 2 回アクセスしようとしても機能しません。そこで、コードを編集して代わりに ID に移行することにしました。

私の編集ルートには、次の保存イベントがあります。

  events: {
    save: function(post){
      post.one('didUpdate', this, function(){
        this.transitionTo('posts.show', post);
      });
      post.get('transaction').commit();
    }
  }

これにより、遷移が発生すると上記のような URL が生成されます。ということで以下のように修正。。。

  events: {
    save: function(post){
      post.one('didUpdate', this, function(){
        this.transitionTo('posts.show', post.id);
      });
      post.get('transaction').commit();
    }
  }

これにより、正しい URL 形式が生成されますが、show route は出力を生成しません。(show outputは、正しい形式で初めて URL にアクセスしたときに出力を生成することに注意してください。編集ルートからURL に遷移したときではありません)。

App.PostsShowRoute = Em.Route.extend({
  model: function(params){
    return App.Post.find(params.id);
  },
  setupController: function(controller, model){
    controller.set('content', model);
  }
});

だから私は混乱しています。この問題の原因 (および RC がなぜそれを生成するのかを知っている場合) についての洞察をいただければ幸いです。私のケーキを持って食べてください。ありがとう!

4

1 に答える 1

3

あなたからApp.PostsShowRoute、ルートマッピングを次のように設定していると推測できます。

App.Router.map(function() {
  this.resource('posts', function() {
   this.route('show', { path:'/:id' });
  });
});

:idに変更する必要があります:post_id:

App.Router.map(function() {
 this.resource('posts', function() {
   this.route('show', { path:'/:post_id' });
 });

});

ここで、Ember 規則を使用しているため、Ember が処理できるため、全体を削除することApp.PostsShowRoute = Em.Route.extend ...でそれを利用できます。

そして、正しい最初の方法を使用してください:

events: {
  save: function(post){
    post.one('didUpdate', this, function(){
      this.transitionTo('posts.show', post);
    });
    post.get('transaction').commit();
  }
}
于 2013-02-26T18:13:06.810 に答える