2010-08-13 13 views
5

Vivo e respiro jQuery, ma mi piace anche trovare un plugin eccellente che faccia il lavoro che voglio perfettamente.Quanto male è jQuery * dentro * Codice MooTools?

L'app My Rails è codificata in jQuery, ma per il caricamento dei file, devo ancora trovare qualcosa di meglio di FancyUpload (meglio IMHO di Uploadify o SWFUpload). Dopo aver provato tutte e tre le librerie, FancyUpload è di gran lunga il migliore da integrare nella mia app.

Tuttavia, FancyUpload è basato su MooTools e il caricamento di entrambe le librerie (e tanto meno il loro utilizzo) inizia a essere un po 'un problema. Innanzitutto, carico MooTools solo sulle pagine che utilizzano la funzionalità di caricamento; tutte le altre pagine utilizzano esclusivamente jQuery. In secondo luogo, ho dovuto manually namespace many of my jQuery functions, che è leggermente fastidioso.

Ma forse la caratteristica più ingombrante di questa configurazione è che non conosco MooTools. Dato che sono stato in grado di fare praticamente tutto il resto con jQuery, non mi sono mai preso la briga di imparare. Ora che mi sto costringendo a usare questa libreria di FancyUpload (che amo e voglio continuare a utilizzare), mi trovo di fronte alla mia inettitudine in MooTools.

In particolare, qui è la mia funzione onFileSuccess per FancyUpload:

onFileSuccess: function(file, response) { 
    var json = new Hash(JSON.decode(response, true) || {}); 

    if (json.get('status') == '1') { 

     // success 
     file.element.addClass('file-success'); 
     (function ($, elem, queue_item) { 
      $('#images').append($(elem).hide().fadeIn('slow')); 
      $(queue_item).fadeOut('slow', function() { $(this).remove(); }); 
     })(jQuery, json.get('data'), file.element); 

    } else { 

     // failure 
     file.element.addClass('file-failed'); 

    } 
} 

Come noterete, ho una funzione jQuery proprio nel bel mezzo di una funzione MooTools.

La mia domanda è questa: è una cosa davvero brutta da fare? La mia funzione funziona esattamente come voglio, ma non so se farò un salto in avanti verso un futuro disastro facendo questo.

Se questa è davvero una cattiva idea, qualcuno può darmi un puntatore su quale sarebbe il codice equivalente a MooTools?

Apprezzerei qualsiasi intuizione o aiuto.

+0

Penso che non dovrebbe essere un problema.Farei un test cross-browser e presta attenzione quando eseguo l'aggiornamento a versioni più recenti dei framework. – Marko

+0

l'equivalente di mootools sarebbe qualcosa come '$ (" images "). Adopt ($ (json.get (" data ")). Fade (0,1, {duration: 1000})); $ (file.element) .set ("tween", { onComplete: function() { this.element.dispose();} }) dissolvenza ("out"); ' - anche se è difficile. per dire quale variabile è un puntatore a un elemento e quale non lo è, mootools non ha bisogno di oggetti per passare attraverso $. –

risposta

0

Generalmente questo non è un problema, ma mi raccomando di non mischiare il codice specifico del framework in nessuna funzionalità a meno che il framework che si sta utilizzando non fornisca le funzionalità necessarie. In questo modo manterrai la portabilità e avrai solo un singolo requisito invece di richiedere 2 versioni specifiche di 2 diverse librerie.

il codice dovrebbe essere qualcosa di simile:

onFileSuccess: function(file, response) { 
    var json = new Hash(JSON.decode(response, true) || {}); 

    if (json.get('status') == '1') { 
     // success 
     file.element.addClass('file-success'); 
     document.id('images').adopt(document.id(json.get('data')).fade('hide').fade('in')); 
     document.id(file.element).set('tween', { 
      onComplete: function() { this.element.dispose();} 
     }).fade('out'); 
    } else { 
     // failure 
     file.element.addClass('file-failed'); 
    } 
} 

Edit: appena notato Dimitar fatto una risposta in qualche modo simile. la mia soluzione funziona allo stesso modo, ma evita correttamente di usare la funzione $ che è particolarmente necessaria quando si mescolano i framework.

+1

equo commento ma ho assunto la chiusura per il codice mootools e mootools viene caricato per primo (che è il modo sbagliato per farlo come in mootools il noconflict è automatico per document.id) - ma non penso che le cose di harald utilizzino document.id quindi è necessario utilizzare una chiusura attorno al suo codice o modificarlo –

4

Penso che l'utilizzo del carattere '$' riservato per jq e mootools non sia mai una buona cosa, considerando che può essere facilmente evitato usando il namespacing in modo corretto. Sto assumendo che stai namespacing usando qualcosa come:

jQuery.noConflict(); 

Quando un modo migliore è solo quello di assegnarlo a una variabile:

var jQ = jQuery.noConflict(); 

Ora è possibile chiamare JQ ('selector qui') per jq e $ per mootools. Mi aiuta a mantenere il mio codice dritto e lo rende anche più leggibile. Puoi anche modificare l'ordine di include, che potrebbe risolvere anche il problema del namespacing.

+0

Grazie per il suggerimento; Mi piace molto questa idea, perché posso vedere come manterrebbe il mio codice più pulito! – neezer

Problemi correlati