1

私はこのjsfiddleを持っています。コメントのフォームを送信して新しいコメントを作成できないことを除いて、すべてが機能します。フォームを送信すると、コンソールに未定義が表示されます。私が達成したいのは、既存の投稿を取得して、その投稿に属するコメントを作成することです。つまり、これが流れです。ユーザーは投稿をクリックし、特定の投稿タイトルをクリックして表示し、コメントの追加をクリックしてその投稿にコメントします。現時点では、[コメントの追加]ボタンをクリックすると未定義が返されることに注意してください。

addCommentメソッドとsaveメソッドを含むコードの関連セクション。

EmBlog.CommentNewController = Em.ObjectController.extend({

  needs: ['postsShow'],
  isAddingNew: false,

  addComment: function(body){

    post = this.get('controllers.postsShow.model');

    store = post.get('transaction');

    store.createRecord(EmBlog.Comment, {body: body});

    this.set('isAddingNew', true);
  },

 save: function(){
  console.log(this.store.commit());
 }  
});

**ハンドルバーテンプレートの関連セクション

<script type='text/x-handlebars' data-template-name='comment/new'>
  {{#if controller.isAddingNew}}
    <form {{action save on='submit'}}>
    {{view Ember.TextArea valueBinding="body" placeholder="body"}}
    <button type="submit"> save comment </button>  
    </form>
  {{/if}} 
  <br/>
  <div>
    <button {{action addComment}} {{bindAttr disabled="isAddingNew"}}>
      Add Comment
   </button>
 </div>
</script>

コメントフォームは、renderを使用して「posts/showtemplate」から送信されます

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

2 に答える 2

4

Comment以下を使用してレコードを作成する必要があります。

var comment = EmBlog.Comment.createRecord()

また

var transaction = this.get('store').transaction();
var comment = transaction.createRecord(EmBlog.Comment);

ユーザーがフォームに入力する前にレコードを作成し、作成されたレコードに値をバインドして、ユーザーが[保存]をクリックしたときにのみコミットするか、テキスト領域をコントローラープロパティにバインドして、レコードを作成してコミットすることができます。ユーザーが保存をクリックします。

これが2番目のアプローチで更新されたフィドルです。

于 2013-03-25T15:48:28.030 に答える
1

素晴らしい投稿。たった一言。最新のライブラリでは、deletePostは機能しません...

Uncaught TypeError:未定義のメソッド'deleteRecord'を呼び出すことができません

解決:

destroyPost: function (post) {
  post.one('didDelete', this, function () {
    this.transitionTo('posts.index');
  });
  post.deleteRecord();
  post.get('transaction').commit();
}
于 2013-07-25T20:41:41.780 に答える