2016-04-29 62 views
0

我有一個名爲Comment的嵌入對象,在遊戲中。每場比賽可以有很多評論。Emberjs - 如何在保存後重置組件上的字段?

當用戶(稱爲父母)查看遊戲頁面時,他們可以發表評論。

我遇到的問題是,我似乎無法在註釋保存後將註釋字段的主體重置爲空。

這是組件:

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不是一個函數

所有我找到的例子都是這樣做此在控制器中或通過在路由更改時創建新記錄(但在我的示例中,路由不會更改,因爲它只是將另一個嵌入對象添加到現有頁面)。

+0

其解決這裏提供:http://stackoverflow.com/questions/35534260/ember-2-3-record-is-updated-on-save-but-燼,仍然說,這 - 它失敗的開/ 35537284#3 5537284也會爲你工作。但簡單地讓我拋出其他選項: (1)成功=功能(){ this.set('body',''); } .bind(this); (2)success()=> { this.set('body',''); }; ()=> {this.set('body','');})。catch(()=> {// log err;}); –

回答

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); 
     } 
    } 
    } 
}); 
+0

謝謝,修正了它!我明白爲什麼,所以謝謝你解釋範圍問題。 – rmcsharry

0

當您引入function時,您必須記住this的值不是(必然)與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); 
     } 
    } 
    } 
}); 
相關問題