2016-08-17 12 views
1

私の問題は、新しい行を作成するオプションがあるグリッドがあることです。このアクションは、データベースに新しい行を挿入するバックエンドにajaxリクエストを送信します。完了すると、MAXインデックス(最後に追加されたインデックス)がフロントエンドに返されます。 ASSERTION_IDの値としてこのインデックスを使用したいと思います。ですから、私はajaxリクエストが完了するのを待って、作成したインデックスでグリッドを更新する必要があります。これを保存する。参照

問題は、when()を使用しているときです。 then()。または単にnewRowにデータを渡すための成功コールバック、this.state.rowsのこの部分とthis.setStateはこれを「間違った」ものにします。だから、これを同じように守りつつ、タスクが完了していることをどうやって確認することができますか?参照?

  handleAddRow: function(e) { 
       var newAssertionID; 
       $.when($.ajax({ 
        url: root + port + "/insertannotation", 
        type: 'post', 
        success: function(data) { 
         newAssertionID = data.assertionID.rows[0][0] 

        } 
       })).then(function(data) { 
        var newRow = { 
         ASSERTION_ID: newAssertionID 
        }; 
        var rows = React.addons.update(this.state.rows, { $push: [newRow] }); 
        this.setState({ rows: rows }); 
       }); 

      }, 
      render: function() { 
       return (
        React.createElement(ReactDataGrid, { 
         contextMenu: React.createElement(MyContextMenu, { 
          onRowDelete: this.deleteRow 
         }), 
         enableCellSelect: true, 
         onGridSort: this.handleGridSort, 
         columns: columns, 
         rowGetter: this.rowGetter, 
         rowsCount: this.getSize(), 
         minHeight: 500, 
         onRowUpdated: this.handleRowUpdated, 
         toolbar: React.createElement(Toolbar, { 
          enableFilter: true, 
          onAddRow: this.handleAddRow 
         }), 
         onAddFilter: this.handleFilterChange 
        }) 
       ); 
      } 

答えて

1

参照を保存する必要があります。

handleAddRow: function(e) { 
    var that = this; // note this 
    var newAssertionID; 
    $.when($.ajax({ 
     url: root + port + "/insertannotation", 
     type: 'post', 
     success: function(data) { 
      newAssertionID = data.assertionID.rows[0][0] 

     } 
    })).then(function(data) { 
     var newRow = { 
      ASSERTION_ID: newAssertionID 
     }; 
     var rows = React.addons.update(that.state.rows, { 
      $push: [newRow] 
     }); 
     that.setState({ 
      rows: rows 
     }); 
    }); 

}, 
関連する問題