从 require 外部调用在 dojo 中 require 内部编写的函数
Calling a function from outside of require which is written inside of require in dojo
<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 块中。
但是在那种情况下,outerFunction()
并没有从面包屑 link.
中被调用
所以我不得不把它搬到外面。现在从外面,outerFunction()
被调用但 init()
没有被 outerFunction()
调用
或者如果我能以任何方式在 require[=35 中编写 outerFunction 方法=]块,可以进行相同的呼叫流程。
解决方案:我在 ready 中使用了 dojo.subscribe(),在 outerFunction() 中使用了 dojo.publish()。它对我有用。
嗯,这确实是一个范围问题。您可以通过多种方式解决它。其中之一是像您提到的那样将 outerFunction()
放入 require()
块中。
但是,如果您从其他地方调用该函数,您可能会遇到问题。对于面包屑 link(您提到过),您可以在同一个 require()
块中使用 onclick 处理程序,例如:
on(breadcrumbLink, "click", function() {
outerFunction({});
});
但是,一旦代码量增加,如果将它们都放在同一个 require()
块中,就会遇到问题(因为它会变得不可维护),因此您可以将 init()
函数到单独的模块,这两个函数都可以包含。
第三种解决方案是将其中一个放在 window
范围内,尽管如果经常这样做是一种非常糟糕的做法。如果将 init()
函数移动到 window
,例如:
window.init = init;
然后您可以从 outerFunction()
中访问它。另一种方法是将 outerFunction()
移动到 require()
块中并将其添加到 window
中,例如:
require(/** Stuff */, function() {
function init() { }
function outerFunction() { }
window.outerFunction = outerFunction;
});
<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 块中。
但是在那种情况下,outerFunction()
并没有从面包屑 link.
所以我不得不把它搬到外面。现在从外面,outerFunction()
被调用但 init()
没有被 outerFunction()
或者如果我能以任何方式在 require[=35 中编写 outerFunction 方法=]块,可以进行相同的呼叫流程。
解决方案:我在 ready 中使用了 dojo.subscribe(),在 outerFunction() 中使用了 dojo.publish()。它对我有用。
嗯,这确实是一个范围问题。您可以通过多种方式解决它。其中之一是像您提到的那样将 outerFunction()
放入 require()
块中。
但是,如果您从其他地方调用该函数,您可能会遇到问题。对于面包屑 link(您提到过),您可以在同一个 require()
块中使用 onclick 处理程序,例如:
on(breadcrumbLink, "click", function() {
outerFunction({});
});
但是,一旦代码量增加,如果将它们都放在同一个 require()
块中,就会遇到问题(因为它会变得不可维护),因此您可以将 init()
函数到单独的模块,这两个函数都可以包含。
第三种解决方案是将其中一个放在 window
范围内,尽管如果经常这样做是一种非常糟糕的做法。如果将 init()
函数移动到 window
,例如:
window.init = init;
然后您可以从 outerFunction()
中访问它。另一种方法是将 outerFunction()
移动到 require()
块中并将其添加到 window
中,例如:
require(/** Stuff */, function() {
function init() { }
function outerFunction() { }
window.outerFunction = outerFunction;
});