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

を導入するときは、 の値が (必ずしも) を囲むスコープの の値と同じfunctionではないことを覚えておく必要があります。次のように、クロージャーで使用する参照を保存します。thisthisComponent

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 に答える