[英]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()
。 請幫幫我。
我需要從outerFunction()
調用上面定義的init()
outerFunction()
。 但這不會發生。 最初我試圖將這個outerFunction()
保留在require塊中。 但在那種情況下, outerFunction()
沒有從面包屑鏈接調用。
所以我不得不把它移到外面。 現在從外部調用outerFunction()
,但是沒有從outerFunction()
調用init()
outerFunction()
或者,如果以任何方式我可以在require塊中編寫outerFunction方法並且可以進行相同的調用流程。
解決方案 :我在readyFunction()中的ready和dojo.publish()中使用了dojo.subscribe()。 它對我有用。
嗯,這確實是一個范圍問題。 您可以通過各種方式解決它。 其中之一是將outerFunction()
放在require()
塊中,就像你提到的那樣。
但是,如果從其他地方調用該函數,則可能會遇到問題。 對於breadcrumb鏈接(您提到過),您可以在同一個require()
塊中使用onclick處理程序,例如:
on(breadcrumbLink, "click", function() {
outerFunction({});
});
但是,一旦代碼量增加,如果將所有代碼放入相同的require()
塊(因為它將變得不可維護),就會出現問題,因此可以將init()
函數拆分為單獨的模塊,可以包含兩個功能。
第三種解決方案,如果經常這樣做是非常糟糕的做法,就是將其中一個放在window
范圍內。 如果將init()
函數移動到window
,例如:
window.init = init;
然后你可以從outerFunction()
訪問它。 另一種方法是移動require()
塊中的outerFunction()
並將其添加到window
中,例如:
require(/** Stuff */, function() {
function init() { }
function outerFunction() { }
window.outerFunction = outerFunction;
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.