2010-08-28 17 views
5

Non si tratta di un confronto tecnico side-by-side, piuttosto di come "pensare in jQuery" rispetto a "pensare in Prototipo".Prototipo a jQuery: migrazione Mindset?

Ho usato Prototype pesantemente per diversi anni, e jQuery un po 'meno pesantemente fino a circa un anno fa, quando ho iniziato a fare molto con esso.

Con Prototype, posso scrivere un codice abbastanza elegante; il mio capo una volta esaminò una grande quantità del mio codice e osservò che era il primo Javascript che avesse mai trovato un piacere da leggere. Capisco - e ho capito fin dall'inizio - quasi istintivamente ciò che Prototype sta cercando di fare, e so come lavorarci.

Il mio codice jQuery è molto di più, come posso mettere questo, "operaio". Mi sento come se stessi combattendo jQuery ad ogni passo. Devo (provate a) forzarmi a seguirlo e non scendere nel JS "nativo", dove so che potrei battere più rapidamente il codice cross-browser pulito. Lavorare di più lo rende più, non meno, frustrante.

Non è (o almeno non del tutto) una mancanza di familiarità con le funzioni disponibili. Saprò spesso che ho bisogno di usare una determinata funzione, ma il modo in cui viene usato sembra davvero bizzarro. Questo di solito è un segno che sto arrivando a qualcosa completamente nel modo sbagliato.

Più penso a questo, più penso di provare a utilizzare jQuery in modalità Prototipo.

Deve esserci un lampo di luce accecante che non mi è ancora successo. Soprattutto se hai lavorato molto con entrambi, quali sono le differenze fondamentali nell'approccio? Come è necessario regolare la propria mentalità quando si passa da uno all'altro?

Non abbiate paura di affermare il assolutamente ovvio, perché può essere solo che lampo accecante ...

+0

mi sento allo stesso modo e ho anche avuto problemi di compatibilità con i browser (in alcuni casi molto rari e tuttavia oscuri) che il prototipo stava gestendo bene –

+1

* "Devo (provate a) forzarmi a seguirlo e non scendere in "JS" nativo "* - non è una goccia, è probabile che sia un miglioramento. Se pensi che un particolare compito possa essere fatto meglio senza una biblioteca, è probabile che tu abbia ragione. –

risposta

1

Il miglior consiglio che posso dare è "Embrace this". In JQ, stai quasi sempre parlando di iterare su un set che è racchiuso nell'oggetto jQuery. Il richiamo di uno dei metodi dell'insieme esegue il metodo su tutti gli elementi dell'insieme, sia esso 1 o 100. Tale metodo restituirà sempre la stessa istanza del set (a parte gli accessor che ottengono una proprietà). Nel contesto dell'interazione, this è il valore dell'elemento in quel set che stai manipolando, solitamente l'elemento DOM grezzo, ma potrebbe essere il valore di una proprietà dell'oggetto o di un elemento dell'array.

+0

"In jQ, stai quasi sempre parlando di iterare su un set che è avvolto nell'oggetto jQuery." Questo aiuta, sicuramente, e può rendere questo meno un problema: "Invocare uno dei metodi dell'insieme esegue il metodo su tutti gli elementi dell'insieme, sia esso 1 o 100." Questo (heh) rende sicuramente più difficile capire il codice degli altri. Non sembra esserci alcun ovvio "HEY! Questo sta iterando su un set" costrutto, come Prototype's each(), e questo mi fa impazzire. –

+0

Bene c'è '$ .each' per iterare su oggetti non jQuery attraversabili (array, oggetti anon, altri costrutti) ed è' $ ('selector'). Each (functionToPerform) 'per applicare le funzioni non jQuery al set . Ma tutto quello che devi fare è guardare il selettore per sapere qual è il contenuto del set. – prodigitalson

4

ho passato quella trasformazione. La cosa principale da dirti più e più volte è che jQuery è, prima di tutto, sul rendere la manipolazione DOM più facile e più sicura su più piattaforme. Non c'è "reduce" (il prototipo usato per chiamarlo "iniettare", credo) in jQuery. Perché? Perché i manutentori non lo considerano importante per l'attività primaria di jQuery.

Così, il modo in cui le estensioni di oggetti di base di Prototype si insinuano nello stile di codifica mentre scrivi il tuo codice per fare il tuo lavoro, beh, questo non succede praticamente in solo jQuery. (Vedi, comunque, la bella libreria Underscore.js per un modo per ottenere alcune di queste funzionalità in modo jQuery.)

Per me, è stato più facile capire come creare su jQuery. È solo un diverso tipo di cosa. Ora, jQuery è molto solido e davvero rende la manipolazione DOM e l'HTML che litigano un lotto più bello di quello che si ottiene dal semplice Javascript. (Penso che Prototype faccia un buon lavoro, ma jQuery è super-focalizzato sul problema.)

0

Perché hai bisogno di pensare in modo diverso? Invece di adattare il tuo stile a qualsiasi struttura o linguaggio che si presenta, perché non adattare il framework o il linguaggio stesso a tuo piacimento. Quindi tutto quello che devi fare è essere aperti all'idea che ci potrebbero essere modi migliori di scrivere o strutturare il codice di quanto tu già sappia, e quando tali modi si presentano, analizzali oggettivamente e poi includili nel tuo repository.

La scelta è quasi mai tutto o niente. Entrambi i framework hanno grandi offerte e puoi usare le tecniche di entrambi in armonia per creare una grande applicazione.