Resultado de la API de MediaWiki

This is the HTML representation of the JSON format. HTML is good for debugging, but is unsuitable for application use.

Specify the format parameter to change the output format. To see the non-HTML representation of the JSON format, set format=json.

See the complete documentation, or the API help for more information.

{
    "batchcomplete": "",
    "warnings": {
        "main": {
            "*": "Subscribe to the mediawiki-api-announce mailing list at <https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce> for notice of API deprecations and breaking changes."
        },
        "revisions": {
            "*": "Because \"rvslots\" was not specified, a legacy format has been used for the output. This format is deprecated, and in the future the new format will always be used."
        }
    },
    "query": {
        "pages": {
            "4": {
                "pageid": 4,
                "ns": 0,
                "title": "Teor\u00eda",
                "revisions": [
                    {
                        "contentformat": "text/x-wiki",
                        "contentmodel": "wikitext",
                        "*": "== RequireJS ==\n\nArquitectura Frontend\n=====================\n\nUso de RequireJS en el Frontend\n-------------------------------\n\nRequireJS es una librer\u00eda que permite encapsular en m\u00f3dulos nuestro\nc\u00f3digo JavaScript y cargarlos bajo demanda (llamada `require`).\n\nPara ello es necesario cargar la librer\u00eda RequireJS en el c\u00f3digo HTML de\nla p\u00e1gina en la que se va a utilizar:\n\n    <html>\n    <head>\n    <script src=\"require.js\" type=\"text/javascript\" \n        data-main=\"modules/main\"></script>\n    </head>\n    <body>\n    </body>\n    </html>\n\nEn el tag de carga se especifica el m\u00f3dulo inicial que RequireJS cargar\u00e1\ny ejecutar\u00e1. En el ejemplo \"modules/main.js\".\n\n### \u00c1rbol de dependencias\n\nT\u00edpicamente los m\u00f3dulos consisten en una llamada a `define`, que toma\nuna lista de los m\u00f3dulos y una funci\u00f3n de inicializaci\u00f3n que se ejecuta\ncuando las dependencias est\u00e1n satisfechas:\n\n    define([ \"map\" ], function(map) {\n        alert(\"este m\u00f3dulo depende del m\u00f3dulo\" \n            + \"map y en este punto map ha sido\"\n            + \"cargado e inicializado\");\n    });\n\nLa funci\u00f3n obtiene recibe como par\u00e1metros referencias a los m\u00f3dulos que\nse definen como dependencias, en el mismo orden:\n\n    define([ \"layer-list\", \"map\" ], function(layerList, map) {\n        // layerList apunta al m\u00f3dulo \"layer-list\"\n        // map apunta al m\u00f3dulo \"map\"\n    });\n\npero el orden de carga puede variar, ya que por ejemplo, en el caso\nanterior otro m\u00f3dulo puede haber cargado ya `layer-list`. RequireJS\nanaliza las llamadas define y crea un \u00e1rbol de dependencias que se\ncargan en cualquier orden que garantice que las dependencias de un\nm\u00f3dulo est\u00e9n todas cargadas e inicializadas cuando el m\u00f3dulo que depende\nde ellas se inicializa.\n\nDe forma m\u00e1s visual:\n\n![image](images/requirejs-transitive.png)\npara cargar A requireJS realiza una secuencia similar a esta:\n\n-   Se detecta la dependencia de A en B y C por lo que pasa a intentar\n    cargarlos.\n-   Se intentar cargar B pero B depende de E, por lo que se intenta\n    cargar E.\n-   Como E no tiene ninguna dependencia se cargar directamente y se\n    llama a su c\u00f3digo de inicializaci\u00f3n.\n-   Ahora que B tiene todas sus dependencias satisfechas se ejecuta su\n    c\u00f3digo de incializaci\u00f3n.\n-   RequireJS pasa a cargar C, pero detecta la dependencia en D y en E\n    y, como E ya ha sido cargada, pasa a cargar D.\n-   Como D no tiene ninguna dependencia se cargar directamente y se\n    llama a su c\u00f3digo de inicializaci\u00f3n.\n-   Ahora C tiene sus dos dependencias ya cargadas, por lo que se llama\n    a su c\u00f3digo de incializaci\u00f3n.\n-   Con B y C ya cargados se pasa a ejecutar el c\u00f3digo de inicializaci\u00f3n\n    de A.\n\nEn la secuencia anterior se ilustra por una parte el hecho de que los\nm\u00f3dulos en los que depende un m\u00f3dulo son cargados e inicializados\npreviamente. Por otra parte, se muestra que el orden de carga de las\ndependencias de un m\u00f3dulo no corresponde con el orden en el que est\u00e1n\ndefinidas en el c\u00f3digo. Por ejemplo, en el caso de C primero se carg\u00f3 E\nantes que D porque la dependencia fue cargada por B previamente.\n\n### Dependencias de m\u00f3dulos no-RequireJS\n\nEn el caso de un m\u00f3dulo que dependa de librer\u00edas que no son m\u00f3dulos\nRequireJS (jquery, openlayers, etc.) es todav\u00eda necesario especificar\nlas dependencias, ya que de lo contrario RequireJS puede cargarlas\narbitrariamente antes o despu\u00e9s. En caso de hacerlo despu\u00e9s, el m\u00f3dulo\nintentar\u00e1 utilizar una librer\u00eda que no est\u00e1 cargada y se producir\u00e1 un\nerror.\n\nLa forma de especificar la dependencia un modulo tal es id\u00e9ntica a la de\nlos modulos RequireJS:\n\n    define([ \"jquery\" ], function($) {\n        alert(\"este m\u00f3dulo depende de jQuery\" \n            + \"y en este punto jQuery ha sido\"\n            + \"cargado e inicializado\");\n    });\n\npero \u00bfde d\u00f3nde saca RequireJS el c\u00f3digo de jQuery? No lo puede obtener\nde ning\u00fan sitio, por lo que hay que especific\u00e1rselo. El m\u00f3dulo `main`,\nque es el m\u00f3dulo de entrada, es el encargado de realizar esta\nconfiguraci\u00f3n:\n\n    require.config({\n        baseUrl : \"modules\",\n        paths : {\n            \"jquery\" : \"http://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min\",\n            \"jquery-ui\" : \"http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/jquery-ui.min\",\n            \"fancy-box\" : \"../js/jquery.fancybox.pack\",\n            \"openlayers\" : \"../js/OpenLayers/OpenLayers.debug\"\n        },\n        shim : {\n            \"fancy-box\" : [ \"jquery\" ]\n        }\n    });\n\nEn el c\u00f3digo de `main` se puede observar c\u00f3mo hay una llamada al m\u00e9todo\n`require.config` que incluye un elemento cuya propiedad `paths` incluye\nlas direcciones de las cuales puede descargar RequireJS cada librer\u00eda.\n\nTambi\u00e9n se puede observar c\u00f3mo en la propiedad `shim` se establecen las\ndependencias entre m\u00f3dulos no-RequireJS.\n\n### Valores de retorno\n\nSe ha mostrado anteriormente c\u00f3mo las dependencias de un m\u00f3dulo son\nrecibidas como par\u00e1metro en la funci\u00f3n de inicializaci\u00f3n:\n\n    define([ \"layer-list\", \"map\" ], function(layerList, map) {\n        // layerList apunta al m\u00f3dulo \"layer-list\"\n        // map apunta al m\u00f3dulo \"map\"\n    });\n\npero, \u00bfqu\u00e9 contienen exactamente estas referencias?\n\nContienen el valor que retorna la funci\u00f3n de inicializaci\u00f3n del m\u00f3dulo\ndependencia. Por ejemplo, el siguiente m\u00f3dulo `map` en su funci\u00f3n de\ninicializaci\u00f3n crea un mapa OpenLayers, a\u00f1ade una capa y la devuelve:\n\n    define([ \"openlayers\" ], function() {\n\n        var mimapa = new OpenLayers.Map(\"map\");\n        mimapa.addLayer(new OpenLayers.Layer.WMS(\"OpenLayers WMS\", \"http://vmap0.tiles.osgeo.org/wms/vmap0?\", {\n            layers : \"basic\"\n        }));\n\n        return mimapa;\n    });\n\nPor tanto, cuando el siguiente m\u00f3dulo establezca la dependencia:\n\n    define([ \"map\" ], function(map) {\n        map.setCenter(new OpenLayers.LonLat(-84, 0), 6);\n    });\n\nla variable `map` que se pasar\u00e1 a la funci\u00f3n de inicializaci\u00f3n de \u00e9ste\nser\u00e1 el mapa OpenLayers que se cre\u00f3 en el m\u00f3dulo `map` anterior.\n\n### Funciones p\u00fablicas\n\nA veces un m\u00f3dulo debe permitir que los m\u00f3dulos que dependen de \u00e9l\nrealicen algunas operaciones sobre el mismo. M\u00e1s adelante se ver\u00e1 que\nexiste otra manera que frecuentemente es mejor, pero de momento\nmostramos otra manera que tambi\u00e9n puede ser \u00fatil en un momento dado.\n\nPor ejemplo, si queremos hacer un m\u00f3dulo `error` para manejar los\nerrores de la aplicaci\u00f3n mostrando un di\u00e1logo al usuario y escribiendo\nel problema en la consola tendr\u00edamos una funci\u00f3n como \u00e9sta:\n\n    function(errorMsg) {\n        console.log(errorMsg);\n        alert(errorMsg);\n    });\n\nPara poder utilizar este m\u00f3dulo tendremos que importarlo en las\ndependencias de nuestro m\u00f3dulo y cuando se produzca la condici\u00f3n del\nerror hacer una llamada a dicho m\u00f3dulo:\n\n    define([ \"error\" ], function(error) {\n        if (condicion) {\n            error.showMessage(\"Se ha cumplido una condici\u00f3n de error\");\n        }\n    });\n\nPero para esto tendr\u00edamos que devolver un objeto en el m\u00f3dulo `error`\nque tenga una funci\u00f3n `showMessage`. Esto podr\u00eda hacerse teniendo un\nm\u00f3dulo `error` como el siguiente:\n\n    define([], function() {\n        return {\n            showMessage : function(errorMsg) {\n                console.log(errorMsg);\n                alert(errorMsg);\n            }\n        };\n    });\n\ncuyo valor de retorno tiene una propiedad showMessage que es la funci\u00f3n\nde error.\n\n### Funciones privadas\n\nEs posible definir funciones privadas dentro del m\u00f3dulo\n\n### Modulo modelo\n\nA continuaci\u00f3n se presenta un m\u00f3dulo ejemplo que puede ser utilizado\ncomo plantilla para la creaci\u00f3n de nuevos m\u00f3dulos:\n\n    define([ \"dependencia1\", \"dependencia2\" ], function(modulo1, modulo2) {\n\n        // variables privadas\n\n\n        // funciones privadas\n\n        // inicializaci\u00f3n\n\n        // valor de retorno\n        return null;\n    });\n\nValores de retorno de los m\u00f3dulos\n\nMessage bus\n-----------"
                    }
                ]
            }
        }
    }
}