搜索

首页  >  问答  >  正文

javascript - 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
某草草某草草2796 天前533

全部回复(2)我来回复

  • 世界只因有你

    世界只因有你2017-05-16 13:38:54

    你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环境已经丢失了。;

    回复
    0
  • phpcn_u1582

    phpcn_u15822017-05-16 13:38:54

    谢邀。

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

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

    或者你在外面
    
    let bindsuc = function(data){}.bind(this);
    
    //然后里面
    ...
    success:bindsuc,
    //error同理
    ...

    回复
    0
  • 取消回复