Frage

Ich habe gerade angefangen, mit Request.js zu arbeiten, und ich bin mir in den entsprechenden Fällen, in denen es verwendet werden soll, sowie die richtige Art und Weise, sie in diesen Fällen zu verwenden.

So habe ich derzeit Dinge mit Request.js eingerichtet. Ich habe zwei Funktionen, functionA() und functionB(). Beide Funktionen erfordern eine zusätzliche Funktion, functionC() richtig funktionieren.

Ich möchte FunctionC () nur laden, wenn nötig, dh wenn funktiona () oder functionB () aufgerufen wird. Ich habe also die folgenden Dateien:

functionc.js

functionC(){
  //do stuff
}

Funktiona.js

functionA(){  
  define(['functionC'],function(){
    //functionC() is loaded because it is listed as a dependency, so we can proceed
    //do some functionA() stuff
  });
}

functionb.js

functionB(){  
  define(['functionC'],function(){
    //functionC() is loaded because it is listed as a dependency, so we can proceed
    //do some functionB() stuff
  });
}

Ist das also richtig eingerichtet? Und wenn ich auf derselben Seite sowohl Funktiona () als auch functionB () aufrufe, wird zusätzliche Arbeiten erledigt, da beide die functionC.js -Datei laden? Wenn ja, ist das ein Problem? Und wenn ja, gibt es eine Möglichkeit, es so einzurichten, dass sie zuerst prüfen, ob functionC.js noch geladen wurde, und nur dann zu laden, wenn es nicht war? Ist dies schließlich eine angemessene Verwendung von fordern.js?

War es hilfreich?

Lösung

define() sollte nur zum Definieren eines Moduls verwendet werden. Zum obigen Beispiel, in dem ein Stück Code dynamisch geladen werden sollte, verwenden Sie require() ist angemessener:

Funktiona.js

functionA(){
  require(['functionC'],function(functionC){
    //use funcC in here to call functionC
  });
}

Einige Notizen:

  • require([]) ist asynchron, also wenn der Anrufer von functionA Erwartet von dieser Funktion einen Rückgabewert, es wird wahrscheinlich Fehler geben. Es ist am besten, wenn functionA akzeptiert einen Rückruf, der aufgerufen wird, wenn functionA wird mit seiner Arbeit gemacht.
  • Der obige Code wird angerufen require() für jeden Anruf bei functionA; Nach dem ersten Anruf wird jedoch keine Strafe zum Laden vorgenommen functionC.js, Es wird nur einmal geladen. Das erste Mal require() wird angerufen, es wird geladen functionC.js, Aber der Rest der Zeit weiß, dass es bereits geladen ist, sodass es das aufruft function(functionC){} Funktion ohne Anfrage functionC.js wieder.

Andere Tipps

Hier finden Sie Details zu RequirsJs und JavaScript -Modularität: JavaScript -Modularität mit Anforderungenjs (vom Spaghetti -Code zum Ravioli -Code)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top