0

我在游戏中有一个名为 Comment 的嵌入式对象。每个游戏可以有很多评论。

当用户(称为家长)查看游戏页面时,他们可以发表评论。

我遇到的问题是,在保存评论后,我似乎无法将评论字段的正文重置为空。

这是组件:

MyApp.AddCommentComponent = Ember.Component.extend({

  body: '',
  actions: {
    addComment: function() {

      var comment, failure, success;
      if (!!this.get('body').trim()) {
        comment = this.store.createRecord('comment', {
          body: this.get('body'),
          game: this.get('game'),
          parent_id: this.get('parent_id'),
          parent_name: this.get('parent_name')
        });

        success = (function() {
          this.set('body', '');
        });
        failure = (function() {
          return console.log("Failed to save comment");
        });
        return comment.save().then(success, failure);
      }
    }
  }
});

错误出现在“this.set”行 - this.set 不是函数

我发现的所有示例都是关于在控制器中执行此操作或通过在路由更改时创建新记录(但在我的示例中路由没有更改,因为它只是将另一个嵌入式对象添加到现有页面)。

4

2 回答 2

1

您正在使用

this.set('body', '');

成功,但是这里的范围发生了变化,您需要保留控制器范围并将主体设置为空字符串,如

MyApp.AddCommentComponent = Ember.Component.extend({

  body: '',
  actions: {
    addComment: function() {
      var that = this;
      var comment, failure, success;
      if (!!this.get('body').trim()) {
        comment = this.store.createRecord('comment', {
          body: this.get('body'),
          game: this.get('game'),
          parent_id: this.get('parent_id'),
          parent_name: this.get('parent_name')
        });

        success = (function() {
          that.set('body', '');
        });
        failure = (function() {
          return console.log("Failed to save comment");
        });
        return comment.save().then(success, failure);
      }
    }
  }
});
于 2016-04-30T11:50:45.120 回答
0

当您引入 afunction时,您必须记住 forthis的值与封闭范围的值不同(不一定)相同this。保存对Component在闭包中使用的引用,如下所示:

MyApp.AddCommentComponent = Ember.Component.extend({

  body: '',
  actions: {
    addComment: function() {

      var comment, failure, success;
      var self= this;

      if (!!this.get('body').trim()) {
        comment = this.store.createRecord('comment', {
          body: this.get('body'),
          game: this.get('game'),
          parent_id: this.get('parent_id'),
          parent_name: this.get('parent_name')
        });

        success = (function() {
          self.set('body', '');
        });
        failure = (function() {
          return console.log("Failed to save comment");
        });
        return comment.save().then(success, failure);
      }
    }
  }
});
于 2016-04-29T19:13:07.557 回答