antdesign底层弹出个confirmModal。怎么获取底层的this?

图片描述

showConfirm() {//弹出确认对话框
        confirm({
            title: '当前总计应收金额为'+this.state.allReceivablePrice+'元',//这里能得到值!!!!
            // content: 'some descriptions',
            okText: '确认回款',
            cancelText: '取消',
            onOk() {
                const {allSelectOrder}=this.state;
                if (allSelectOrder.length==0){
                    message.error('订单Id不能为空');
                    return;
                }else {
                    this.setState({loading: true});
                    $.ajax({
                        url: API.flow,
                        type: 'post',
                        dataType: 'json',
                        data: JSON.stringify(allSelectOrder),
                        contentType: 'application/json;charset=UTF-8',
                        success: ()=> {
                            this.setState({
                                loading: false,
                            });
                            message.success('添加收款记录成功!');
                            this.refreshData();
                        },
                        error: (data)=> {
                            Modal.error({
                                title: data.responseJSON.msg
                            });
                            this.setState({ loading: false });
                        }
                    })
                }
            },
            onCancel() {

            },
        });
    },

这个this我怎么获取不到呢,都加了bind了
报错:

PaymentCollection.jsx:329 Uncaught TypeError: Cannot read property 'state' of undefined
阅读 5.4k
2 个回答

你ajax的success和error都没有bind。注意看报错信息的位置。

showConfirm() {//弹出确认对话框
    confirm({
        title: '当前总计应收金额为'+this.state.allReceivablePrice+'元',//这里能得到值!!!!
        // content: 'some descriptions',
        okText: '确认回款',
        cancelText: '取消',
        onOk: () => {
            const {allSelectOrder}=this.state;
            if (allSelectOrder.length==0){
                message.error('订单Id不能为空');
                return;
            }else {
                this.setState({loading: true});
                $.ajax({
                    url: API.flow,
                    type: 'post',
                    dataType: 'json',
                    data: JSON.stringify(allSelectOrder),
                    contentType: 'application/json;charset=UTF-8',
                    success: ()=> {
                        this.setState({
                            loading: false,
                        });
                        message.success('添加收款记录成功!');
                        this.refreshData();
                    },
                    error: (data)=> {
                        Modal.error({
                            title: data.responseJSON.msg
                        });
                        this.setState({ loading: false });
                    }
                })
            }
        },
        onCancel() {

        },
    });
},

准确来说是onOk函数的this环境已经丢失了。;

谢邀。

-----分割线----

在showConfirm外面定义个一个_this,然后用_this替换this即可。

或者你在外面

let bindsuc = function(data){}.bind(this);

//然后里面
...
success:bindsuc,
//error同理
...
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题