坚持这一点。参考

时间:2016-08-17 16:31:54

标签: javascript reactjs

我的问题是我有一个网格,可以选择创建一个新行。此操作向我的后端发送一个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
                    })
                );
            }

1 个答案:

答案 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
        });
    });

},