1

我有一个来自 metronic 主题的向导,我试图调用一个函数来检查我的数组是否包含重复项。

如果我删除这部分代码,它可以正常工作。

console.log(this.checkIfArrayIsUnique()); 

代码

var wizard = (<any>$('#m_wizard')).mWizard();        
                    //== Validation before going to next page
                    wizard.on('change', function(wizard) {
                        if(wizard.getStep() > 2){    
                            console.log(this.checkIfArrayIsUnique());                     
                        }
                        mApp.scrollTop();                                        
                    })

现在我的 checkIfArrayIsUnique() 只是一个虚拟函数

checkIfArrayIsUnique() 
    {
        return true;
    }

我如何在“更改”事件之外调用方法?所以我可以通过我的数组运行并确认它没有任何重复项。

4

2 回答 2

2

问题是“函数(向导)”调用,因为它创建了一个新范围。但是您的 checkIfArrayIsUnique() 实际上不在此范围内。

尝试使用 ES6 函数语法

wizard.on('change',(wizard) => {
    if(wizard.getStep() > 2){                 
        console.log(this.checkIfArrayIsUnique());                                  
    }
    mApp.scrollTop();                                        
})

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions

于 2018-02-27T08:55:20.753 回答
1

在你的更改函数中,变量 this 指向当前函数,要使用它,你应该让 this 指向 out 对象,你应该这样写:

var that = this;
var wizard = (<any>$('#m_wizard')).mWizard();        
//== Validation before going to next page
wizard.on('change', function(wizard) {
    if(wizard.getStep() > 2){    
        console.log(that.checkIfArrayIsUnique());                     
    }
    mApp.scrollTop();                                        
})

于 2018-02-27T08:56:11.767 回答