1

我有这个jsfiddle。除了我无法通过提交评论表单来创建新评论外,一切正常。当我提交表单时,控制台显示 undefined。我希望实现的是获取现有帖子,然后创建属于该帖子的评论。所以这是事情的流程,用户将单击帖子,然后单击特定的帖子标题以显示它,然后单击添加评论以对该帖子发表评论。需要注意的是,此时点击添加评论按钮将返回undefined

代码的相关部分带有addCommentsave方法。

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>

评论表单是通过“posts/show template”使用渲染提交的

 <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);

您可以在用户填写表单之前创建记录,并将值绑定到该创建的记录并仅在用户单击保存时提交,或者您可以将文本区域绑定到控制器属性,然后创建并提交记录用户点击保存。

这是第二种方法的更新小提琴

于 2013-03-25T15:48:28.030 回答
1

很棒的帖子。只说一句。使用最新的库,deletePost 不起作用...

未捕获的类型错误:无法调用未定义的方法“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 回答