1

コメントが多い投稿があります。問題は、すべてのコメントを取得 できますが、単一のコメントを取得できず、結果として単一のコメントを編集できないことです。単一のコメントを取得できないため、トランザクションに単一のレコードを追加したり、単一のレコードを編集したりできないことを意味します。

コメントはサイドロードされ、ルートによってサポートされません。コメントに関連するコントローラーのルートは必要ありません。したがって、 controllerForを使用して ApplicationRoute で CommentController のモデルを設定し、[needs] API を使用して、モデルのコンテンツを必要とする他のコメント関連のコントローラーにモデルを含めます。

投稿をクリックしてコメントにアクセスできます ->投稿タイトルをクリックします ->コメントを追加* をクリックし、保存してeditcommentを再クリックします。

これはjsfiddle ですが、この質問に関連するコードの関連ビットは以下のとおりです。

 EmBlog.ApplicationRoute = Ember.Route.extend({
   setupController: function() {

    this.controllerFor('comment').set('model', EmBlog.Comment.find());      
   }
 });

コメント コントローラー

  //Even when I use ArrayController, the error is still there
   EmBlog.CommentController = Ember.ObjectController.extend({
      content: null
   });

編集を処理するコントローラー。すべてのエラーは editComment メソッドで発生します。

 EmBlog.CommentEditController = Ember.ObjectController.extend({

   needs: ['comment'],
   isEditing: false,

   editComment: function(post) {

     var comment =  this.get('controllers.comment.content');  

     var yk = comment.get('post');

     //this line is undefined 
     console.log(yk);

    var commentEdit = this.set('content', comment);
     console.log(commentEdit);

    transaction = this.get('store').transaction();

    //Uncaught Error: assertion failed: You must pass a record into transaction.add() 
    transaction.add(commentEdit);

    this.transaction = transaction;

    this.set('isEditing', true);

   }

  });

ポスト/ショー用ハンドルバー

  <script type="text/x-handlebars" data-template-name="posts/show">
    {{render 'comment/edit' comment}}
  </script>
4

1 に答える 1

0

今のところすべてが機能しており、ここに jsfiddle があり、フィクスチャのコメントを編集できます。

しかし、唯一の既存の問題は、フィクスチャの最初のコメントしか編集できないことです。2 番目のコメントを編集できない、または追加した新しいコメントを編集できない新しいコメント

基本的に、needs api を介して postShow の投稿を取得し、投稿の ID を取得して、それを検索引数として ** EmBlog.Comment.find** に渡しました。次に、EmBlog.CommentEditControllerの内容を、今行った検索の結果に設定します。この後、EmBlog.CommentEditControllerの新しいコンテンツを transaction.add(this.get('content'))でトランザクションに追加しました。

EmBlog.CommentEditController = Ember.ObjectController.extend({

   needs: ['comment', 'postsShow'],
   isEditing: false,

   editComment: function() {  
     var post = this.get('controllers.postsShow.content');
     console.log(post);

     var postId = post.get('id');
     console.log(postId);

     comment = EmBlog.Comment.find(postId);
     console.log(comment);

     transaction = this.get('store').transaction();

     var updatedContent = this.set('content', comment);
     console.log(updatedContent);
     console.log(this.get('content')); 

    transaction.add(this.get('content'));
    console.log(transaction);

    this.transaction = transaction;   

    this.set('isEditing', true);

   },

  save: function(){

   var comment = this.get('content');
   comment.one('didUpdate', this, function() {
      this.set('isEditing', false);
   });

  this.transaction.commit();
  this.transaction = null;
   console.log(this.get('content')); 
  }  

});
于 2013-04-03T13:52:02.647 に答える