gpt4 book ai didi

javascript - 从 require 外部调用在 dojo 中 require 内部编写的函数

转载 作者:可可西里 更新时间:2023-11-01 13:07:16 25 4
gpt4 key购买 nike

<html>
<head>
<script>
require(["dojo/ready"],function(ready){

function init(dataItem) {
alert("inside init method")
updateData(dataItem);
}
function updateData(dataItem){
//inside this function, i am creating some breadcrumb and making each part of it a link.
//Now that link is calling another method outerFunction()
}
ready(function(){
init({
type: "All Locations",
id: "All_Locations"
});
});
});

function outerFunction(jsonObj){
init(jsonObj); // not working

}
</script>
</head>
<body>
<div>
</div>
</body>
</html>

所以基本上我需要从 outerFunction() 调用 init()。请帮助我。

我需要从 outerFunction() 调用上面定义的 init()。但这并没有发生。最初我试图将此 outerFunction() 保留在 require block 中。但在那种情况下,outerFunction() 并未从面包屑链接中调用。

所以我不得不把它移到外面。现在从外部调用 outerFunction()init() 未从 outerFunction()

调用

或者如果我能以任何方式在 require block 中编写 outerFunction 方法并且可以进行相同的调用流程.

解决方案:我在 ready 中使用了 dojo.subscribe(),在 outerFunction() 中使用了 dojo.publish()。它对我有用。

最佳答案

嗯,这确实是一个范围问题。您可以通过多种方式解决它。其中之一是像您提到的那样将 outerFunction() 放在 require() block 中。

但是,如果您从其他地方调用该函数,您可能会遇到问题。对于面包屑链接(您提到的),您可以在同一 require() block 中使用 onclick 处理程序,例如:

on(breadcrumbLink, "click", function() {
outerFunction({});
});

但是,一旦代码量增加,如果将它们全部放在同一个 require() block 中就会出现问题(因为它会变得不可维护),因此您可以将 init() 函数拆分为一个单独的模块,两个函数都可以包含该模块。


第三种解决方案是将它们中的任何一个放在 window 范围内,尽管如果经常这样做是一种非常糟糕的做法。如果将 init() 函数移动到 window,例如:

window.init = init;

然后您可以从 outerFunction() 中访问它。另一种方法是将 outerFunction() 移动到 require() block 中,并将其添加到 window 中,例如:

require(/** Stuff */, function() {
function init() { }

function outerFunction() { }
window.outerFunction = outerFunction;
});

关于javascript - 从 require 外部调用在 dojo 中 require 内部编写的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30998970/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com