簡體   English   中英

在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() 請幫幫我。

我需要從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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM