2010-09-17 18 views
6

Estoy creando un complemento jQuery personalizado para un proyecto en el que estoy trabajando. Quiero devolver un objeto que es personalizado a otro plugin de jQuery ... en lugar de tener que asegurarme de que cada página que usa mi complemento también tiene este otro complemento, ¿es posible incluirlo en el plugin actual?Cómo incluir un complemento externo dentro de otro complemento jQuery que se está creando

En lugar de escribir lo siguiente en cada página que utiliza mi plugin:

<script type="text/javascript" src="url_to_my_plugin" /> 
<script type="text/javascript" src="url_to_plugin" /> 

quería ver si hay una opción que permitiría algo así como:

(function($) { 
      $.include('url_to_plugin'); 
      //code to implement my plugin 
})(jQuery); 

Gracias por la sugerencia Marko ... Puedo estar haciendo algo mal porque el complemento al que me refiero no está siendo reconocido. A continuación se muestra el código:

(function($) { 
    var script = document.createElement('script'); 
    script.type = 'text/javascript'; 
    script.src = 'jquery.simplemodal.js'; //in same dir as my plugin 
    //tried both 
    document.body.appendChild(script); 
    document.getElementsByTagName('head')[0].appendChild(script); 

    $.fn.SUI_CheckProgress = function(options) { 
      return this.each(function() { 
       var obj = $(this); 
       var nDiv = $('<div>'); 
       nDiv.modal(); //error nDiv.modal() is not a function 
       $(obj).append(nDiv); 
      } 
    }; 
}); 

Probé declarar el guión tanto dentro como fuera de la llamada a la función (lo ideal es que suceda a nivel mundial). Verifiqué que el código se ejecuta correctamente si hago referencia al script en la página desde la que llamo, sin embargo, cuando elimino la referencia, falla. Se agradecería cualquier información adicional sobre cómo agregar secuencias de comandos programáticamente a una página.

Solucionado: Mi problema era que estaba haciendo referencia al mismo directorio que el plugin js, sin embargo, cuando se agrega a la página está fuera de ese directorio.

fue

script.src = 'jquery.simplemodal.js'; 

fija

script.src = 'js/jquery.simplemodal.js'; 
+0

no es necesario hacer 'obj' en un jQuery Objeto dos veces ... use 'obj.append (nDiv)' – Mottie

+0

que en realidad era porque la llamada está incrustada dentro de una llamada ajax, dejé las cosas ajax para simplificar. – jon3laze

Respuesta

2

Claro - se puede crear un nuevo elemento de guión y lo añadirá a la cabeza.

var script = document.createElement('script'); 
script.src = 'url-to-plugin'; 
script.type = 'text/javascript'; 
document.getElementsByTagName('head')[0].appendChild(script); 

Si esto no funciona, quizás probar el método en this page, es un enfoque ligeramente diferente utilizando setAttribute.

+0

Gracias por su pronta respuesta. No pude hacer que el código funcione, he actualizado mi publicación para incluir el código y el problema. Gracias – jon3laze

+0

¿Todavía tiene problemas? Noté que aceptaste mi respuesta ... He editado mi publicación para incluir otro método para establecer los atributos del elemento 'script'. ¿Puedes examinar la sección '' usando Firebug y ver si hay algo adjunto a ella? – Marko

+0

Gracias Marko está trabajando ahora. Estaba pensando en la estructura del archivo incorrectamente. Estaba haciendo referencia al plugin js como si estuviera en el mismo directorio que mi complemento porque es ...sin embargo, cuando se agrega a la página real, no lo es. : P – jon3laze

3

También puede usar la función getScript de jQuery.

Podría ser utilizado con devoluciones de llamada para el éxito y/o fracaso como:

$.getScript("somejs.js", function(data, textStatus, jqxhr) { 
    console.log("callback");  
} 

$.getScript("somejs.js") 
.done(function(script, textStatus) { 
    console.log("done callback"); 
}) 
.fail(function(jqxhr, settings, exception) { 
    console.log("fail callback"); 
});  

o sin asignar una devolución de llamada como:

$.getScript("somejs.js");    
Cuestiones relacionadas