¿Cómo cargar un archivo js de módulo personalizado en magento 2?

9

He creado el módulo deslizante de banner para magento 2. He llamado al archivo JS usando las siguientes formas y funciona bien. En la clase de bloque creé la siguiente función

public function getBaseJs($fileName){

        return $this->_storeManager->getStore()->getBaseUrl(
                \Magento\Framework\UrlInterface::URL_TYPE_MEDIA
            ).'bannerslider/js/'.$fileName;
    }

y esta función se llama en el bannerslider.phtmlarchivo de la siguiente manera.

<script type="text/javascript" src="<?php echo $this->getBaseJs('jquery-1.7.min.js') ?>"></script>
<script type="text/javascript" src="<?php echo $this->getBaseJs('jquery.flexslider.js') ?>"></script>

Pero, de acuerdo con el mecanismo de dependencia de jQuery de require.js¿Cómo puedo hacerlo?

Rajput orante
fuente

Respuestas:

29

Finalmente, obtuve la solución para mi consulta. Me gustaría compartirlo en detalles como a continuación.

ingrese la descripción de la imagen aquí

Paso 1: Agregue el archivo js de su módulo en<Vendor>/<Module_Name>/view/<area>/web/js/

p.ej <Vendor>/<Module_Name>/view/<area>/web/js/flexslider.js

Paso 2: crea el requirejs-config.jsarchivo en<Vendor>/<Module_Name>/view/<area>/

p.ej <Vendor>/<Module_Name>/view/<frontend>/requirejs-config.js

Agregue el siguiente código a requirejs-config.js

var config = {
    map: {
        '*': {
            bannerslider: 'VendorName_ModuleName/js/flexslider'
        }
    }
};

Nota: puede establecer el nombre de su objeto según su elección. En mi caso, configuré como bannerslidery no agrego la extensión .js al nombre del archivo enVendorName_ModuleName/js/flexslider

Paso 3: llame al functionjs de su módulo en el .phtmlarchivo de la siguiente manera.

<script type="text/javascript">
    require(['jquery','bannerslider'],function($){
        $(window).load(function() {
            $('.flexslider-8').flexslider({
                animation: "fade",
                controlNav: "thumbnails",
                slideshowSpeed: 2000,
                minItems: 2,
                maxItems: 4
            });
        });

    });
</script>

esta trabajando bien para mi.

Rastreo: use la Netpestaña para ver la URL solicitada del archivo js cargado o no.

ingrese la descripción de la imagen aquí

Rajput orante
fuente
44
mejor usar 'domReady!' plugin en lugar de $ (window) .load (), por ejemplo require (['jquery', 'bannerslider', 'domReady!], function ($) {... código ejecutado solo después de dom load})
KAndy
Sí, te será muy útil.
Praput Rajput
@KAndy depende, si quieres que el script se ejecute en último lugar, ¿no es mejor usar $ (ventana)? ¿no hace que el script se ejecute no solo cuando se lee DOM, sino cuando se ejecutan todos los scripts?
Lachezar Raychev
Y esa forma no funciona para mí ... dice static / adminhtml / Magento / backend / en_US / gift.js 404 (No encontrado) He borrado el caché y el pub / static ... bot nope ... no funciona
Lachezar Raychev
tachar eso, está funcionando ... domReady! sin embargo, no funciona ... ¿cómo puedo decirle a un script que se ejecute después de que se hayan cargado todos los demás, o que no exista en la metodología actual de magent2?
Lachezar Raychev
4

Mi camino es:

Paso 1

Incluya el archivo javascript base de una extensión usando las instrucciones de diseño.

Paso 2

Solicite los otros archivos javascript de la extensión del archivo base con RequireJS:

require(
    [
      'jquery', 
      '{VendorName}_{ModuleName}{path_to_js_file/relative_to/view/web/no_js_at_end}'
     // ex. Magento/Ui/view/base/web/js/grid/sticky/sticky.js
     // became Magento_Ui/js/grid/sticky/stick
    ], 
    function($, someOtherLibrary) {
        // custom code here...
    );
});
Mage2.PRO
fuente
1
tengo un error, el requerimiento no está definido, porque mi js se carga antes de requirejs
simple guy