Frage

Ich fing an, mehrere Tutorials über RequiresJs zu lesen. In keinem von ihnen wurde das Schlüsselwort "Definieren" für mich zufriedenstellend erklärt. Könnte mir jemand bei Folgendem helfen:

define(
  ["Models/Person", "Utils/random", "jquery"], 
  function (Person, randomUtility, $) {..}
)  

Was ist "Define"? Definieren Sie eine Funktion mit einem Array und einer anonymen Funktion darin? Oder ist es noch etwas anderes? Kann mir jemand mehr Informationen zu dieser Art von Definitionen geben?

Addition: Vielen Dank an Nnnnnn und Pradeek für Ihre Antworten. Hier in Europa war es 2:30 Uhr in der Nacht, als ich die Frage stellte. Vielleicht habe ich deshalb nicht erkannt, dass es ein einfacher Funktionsaufruf war.

War es hilfreich?

Lösung

define ist nicht spezifisch zu fordernJs, es ist Teil der AMD -Spezifikation. Burke wird feststellen, dass Refordjs nicht genau implementiert, wie AMD es angibt, da AMD die Browser nicht wirklich im Auge behalten.

define hat keine anonyme Funktion darin. define ist eine Methode, die AMD -basierten JavaScript -Dateien zum Laden ihrer Daten zur Verfügung stellt. Bibliotheken wie ReformeJs stellen dies Ihnen zur Verfügung. Die spezifische Implementierung ist für Sie wahrscheinlich nicht wertvoll. Also werde ich den, den Sie zur Verfügung gestellt haben, durchgehen, da dies die häufigste Art ist, ein Modul zu deklarieren.

define( [array], object );

Array ist eine Liste von Modulen, von denen dieses Modul abhängt. Es gibt eine 1 zu 1 -Beziehung zwischen Modulen und Dateien. Sie können weder mehrere Module in einer Datei noch mehrere Dateien für ein Modul haben.

Objekt ist das Modul, das Sie definieren. Dies kann alles sein, eine Struktur oder eine Funktion, die eine Struktur zurückgibt. Lesen Sie die Dokumente auf Fordernjs für mehr Details.

Wenn Objekt eine Funktion ist, sind die an die Funktion übergebenen Argumente die Module, die als Abhängigkeiten im ersten Define -Argument aufgeführt sind. Es ist auch wichtig zu beachten, als wenn Sie eine Funktion als übergeben object, Es wird nur einmal laufen. Die in dieser einen Instanziierung erstellten Methoden oder Eigenschaften können jedoch jederzeit zugegriffen werden. Anschließend können Sie von anderen Modulen zugegriffen werden, in denen dieses Modul als Abhängigkeit aufgeführt ist.

Viel Glück, ich empfehle, damit herumzuspielen und die Dokumente zu lesen, wenn die Dinge keinen Sinn ergeben. RequiredJS -Dokumente sind großartig als kurzer Start in Bezug auf die Funktionsweise von AMD -Modulen.

Andere Tipps

ich fand define Definiert am Boden von fordern.js (auch ich habe mich gefragt, was für eine Sache das ist define Wort ist, und das ist die Antwort ich war auf der Suche nach):

/**
 * The function that handles definitions of modules. Differs from
 * require() in that a string for the module should be the first argument,
 * and the function to execute after dependencies are loaded should
 * return a value to define the module corresponding to the first argument's
 * name.
 */
define = function (name, deps, callback) {
    var node, context;

    //Allow for anonymous modules
    if (typeof name !== 'string') {
        //Adjust args appropriately
        callback = deps;
        deps = name;
        name = null;
    }

    //This module may not have dependencies
    if (!isArray(deps)) {
        callback = deps;
        deps = null;
    }

    //If no name, and callback is a function, then figure out if it a
    //CommonJS thing with dependencies.
    if (!deps && isFunction(callback)) {
        deps = [];
        //Remove comments from the callback string,
        //look for require calls, and pull them into the dependencies,
        //but only if there are function args.
        if (callback.length) {
            callback
                .toString()
                .replace(commentRegExp, '')
                .replace(cjsRequireRegExp, function (match, dep) {
                    deps.push(dep);
                });

            //May be a CommonJS thing even without require calls, but still
            //could use exports, and module. Avoid doing exports and module
            //work though if it just needs require.
            //REQUIRES the function to expect the CommonJS variables in the
            //order listed below.
            deps = (callback.length === 1 ? ['require'] : ['require', 'exports', 'module']).concat(deps);
        }
    }

    //If in IE 6-8 and hit an anonymous define() call, do the interactive
    //work.
    if (useInteractive) {
        node = currentlyAddingScript || getInteractiveScript();
        if (node) {
            if (!name) {
                name = node.getAttribute('data-requiremodule');
            }
            context = contexts[node.getAttribute('data-requirecontext')];
        }
    }

    //Always save off evaluating the def call until the script onload handler.
    //This allows multiple modules to be in a file without prematurely
    //tracing dependencies, and allows for anonymous module support,
    //where the module name is not known until the script onload event
    //occurs. If no context, use the global queue, and get it processed
    //in the onscript load callback.
    (context ? context.defQueue : globalDefQueue).push([name, deps, callback]);
};

Ich habe diese Seite gefunden Warum AMD? sehr hilfreich. Um von dieser Seite zusammenzufassen, ist die AMD -Spezifikation hilfreich bei der Überwindung von "Schreiben Sie eine Reihe von Skript -Tags mit impliziten Abhängigkeiten, die Sie manuell bestellen müssen". Es ist hilfreich beim Laden der Abhängigkeiten vor der Ausführung der erforderlichen Funktionen, ähnlich wie import In anderen Programmiersprachen wie Python. AMD verhindert auch das Problem der globalen Namespace -Verschmutzung. Prüfen "It is an improvement over the web's current "globals and script tags" because" Sektion.

Ich denke, die Erforderliche API -Spezifikation fasst es ziemlich gut zusammen:

Wenn das Modul Abhängigkeiten hat, sollte das erste Argument ein Array von Abhängigkeitsnamen sein, und das zweite Argument sollte eine Definitionsfunktion sein. Die Funktion wird aufgerufen, um das Modul zu definieren, sobald alle Abhängigkeiten geladen wurden. Die Funktion sollte ein Objekt zurückgeben, das das Modul definiert.

Sie listen Beispiele für alle verschiedenen syntaktischen Formen von Definen auf.

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