我的问题是我有一个网格,可以选择创建一个新行。此操作向我的后端发送一个ajax请求,该请求将新行插入到我的数据库中。完成后,它将MAX索引(最近添加的索引)返回到我的前端。我想将此索引用作ASSERTION_ID中的值。所以我需要等待ajax请求完成,然后用创建的索引更新网格。
问题是当我使用when()时。然后()。或者只是成功回调将数据传递给我的newRow然后.this.state.rows和this.setState的.this部分指向"错误"这个。那么如何确保任务完成,同时仍然坚持相同的这一点。参考?
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
})
);
}
答案 0 :(得分: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
});
});
},