function()不是dojo中的函数

i7uaboj4  于 2022-12-16  发布在  Dojo
关注(0)|答案(2)|浏览(165)

我在dojo中调用函数时遇到此错误:
类型错误:此.loadNameAndDescpFromLookup不是函数
但我不知道为什么?:这是我代码

readBarcodeFromMobile: function(){
        stompClient.subscribe('/topic/messages', function(event) {
            registry.byId('PId').set("value", event.body);
            this.loadNameAndDescpFromLookup(event.body); // the error is here
        });
    });
}            

loadNameAndDescpFromLookup: function(barcode){ }

有什么想法吗?

ddrv8njm

ddrv8njm1#

正如其他人指出的,问题在于this没有引用您希望在函数内部使用的对象。
解决方案是将this上下文存储在变量中,并在以后引用它。
例如

readBarcodeFromMobile: function(){
const self = this; // save the `this` context in a variable
this.socket = SockJS('/controller/Barcode');
this.sockets.push(this.socket);
stompClient = Stomp.over(this.socket);
stompClient.connect({}, function(frame) {
    stompClient.subscribe('/topic/messages', function(event) {
      if(registry.byId('productBarcodeId') != undefined){
        registry.byId('productBarcodeId').set("value", event.body);
        self.loadNameAndDescpFromLookup(event.body); // use the stored context
      }
    });
 });
} 
loadNameAndDescpFromLookup: function(barcode){ }
klh5stk1

klh5stk12#

这里的问题是this
您的代码的一部分:

function(event) {
  if(registry.byId('productBarcodeId') != undefined){
    registry.byId('productBarcodeId').set("value", event.body);
    this.loadNameAndDescpFromLookup(event.body); // the error is here
  }
}

这里的this引用的是function,而不是您写入整个代码的对象。但显然,该函数没有指定的函数,因此发生错误。
我真的不知道如何正确地执行此操作,但您可以使用变量来存储所需的上下文,并使用该变量来代替this
示例:

<head>
<style>
#btn1, #btn2 {
width: 200px;
height: 200px;
}
</style>
</head>
<Body>
<Button id="btn1">Working</Button>
<Button id="btn2">Error</Button>
<script>
init();
function init() {
	var currentThis = this; //Here the right this-context is stored in a variable
	document.getElementById("btn1").onclick = function() {
                  currentThis.test(); //here the var currentThis will be used to find the right scope
	}
        document.getElementById("btn2").onclick = function() {
                  this.test(); //Here an Error will occur
	}
}

function test() {
	alert("working");
}
</script>
</Body>

相关问题