2013-01-22 12 views
6

Tutte le nostre app sono php mvc e con un livello comportamentale js molto semplice in alto sul lato client. Vogliamo strutturare maggiormente il javascript e smettere di richiedere "snippet" per eseguire un comportamento semplice (come il caricamento di diversi plugin jquery dappertutto). Non usiamo framework javascript MVC e stiamo cercando una soluzione ottimale per le nostre nuove app.framework Javascript per "hijax" pushstate

Una delle soluzioni più interessanti è mantenere il server lato rendering per noi, come Twitter does. Lo chiamano "Hijax + rendering lato server". Noi preferiamo non avere un quadro completo soffiato MVC in JavaScript, ma queste citazioni dal blog sono molto attraente per noi:

Per contratto, i nostri componenti si attaccano a un singolo nodo DOM, ascoltare gli eventi tramite delega, del fuoco eventi sul DOM, e quegli eventi sono trasmessi ad altri componenti tramite bubbling di eventi DOM. [...] In secondo luogo, tutti i nostri componenti sono definiti usando AMD.

Abbiamo cercato di creare qualcosa di nostro, ma senza competenze javascript di alto livello non possiamo andare lontano in questo. Qualcosa come jquery-pjax sembra una buona soluzione anche per casi molto semplici.

Siamo alla ricerca di:

  1. una segregazione UI/dati XHR loosly coppia con il DOM
  2. Evento guidato interfaccia utente, in modo da sviluppatori possono allegare gli ascoltatori a tutti i tipi di oggetti DOM

C'è qualcosa come un framework javascript per questo? Con pushState ottenendo sempre più attenzione, spero che qualcosa sarà disponibile. Qualche idea?

+1

L'approccio di IMO Twitter è abbastanza miserabile. A giugno ho scritto [demo js bookmarklet] (http://dist.meekostuff.net/meeko-twitter/) e [article] (http://www.meekostuff.net/blog/Twitter-without-Hashbangs/) mostrando come avrebbero potuto migrare a 'pushState' migliorando progressivamente mobile.twitter.com. Ho usato il mio [HTMLDecor] (http://github.com/meekostuff/HTMLDecor/) framework js e la demo ha richiesto solo pochi giorni. Quanti mesi uomo ha fatto Twitter per migrare? –

+0

Commento interessante Sean :-) Tuttavia, non passiamo a js hijax a causa del guadagno di prestazioni desiderato, a volte abbiamo bisogno di script comportamentali in cui html non può svolgere il lavoro e vogliamo ridurre al minimo le nostre applicazioni lato server. Ecco perché pensavamo che l'hijax sarebbe stato davvero adatto a noi. E quando javascript è disabilitato, dovresti ottenere un fallback della "vecchia" app a pagina intera. E sono pienamente d'accordo con "hashbangs is dead": sono inflessibili e il progressivo miglioramento diventa un no-go –

+0

Questo è un altro problema con il nuovo twitter.com - non c'è modo di twittare se js è disabilitato. Miglioramento progressivo come un ripensamento. –

risposta

0

ho intenzione di provare a rispondere alla tua domanda al meglio delle mie capacità. Detto questo, dirò che la tua domanda è molto ampia e abbastanza ambigua. Non hai comunicato correttamente ciò che stai cercando in una libreria JavaScript. Hai menzionato molti argomenti diversi che sono tutti complicati e ognuno di questi server ha uno scopo specifico nello sviluppo lato client. Anche se ci potrebbero essere implementazioni di tutti questi concetti in natura, non esiste una risposta chiara per risolvere tutti i tuoi problemi.

Inizierò con il primo punto di "UI/dati segregazione". Questo concetto riguarda davvero la separazione delle preoccupazioni. Vuoi che la tua interfaccia utente esista separatamente dai tuoi dati. Quello che stai davvero cercando qui è che il tuo HTML rifletta lo stato attuale del tuo modello di dati. Vuoi anche che questo accada automaticamente per te. Questo è un flusso di lavoro molto comune con un modello di progettazione MVC. JavaScript ha diverse opzioni a vostra disposizione: Backbone.js, AngularJS, EmberJS, e l'elenco potrebbe continuare ...

Nella mia esperienza personale di usare un bel po 'di questi diversi quadri, vorrei suggerire Backbonejs per la sua natura flessibile e leggero . In Backbone abbiamo il concetto di una "vista" che può essere collegato direttamente a un modello di dati. Supporta anche il tuo concetto desiderato di "pushSate" attraverso il suo meccanismo di Rotte.

La parte "UI guidata dagli eventi" può essere gestita da un numero qualsiasi di librerie JavaScript diverse. jQuery è probabilmente la libreria più popolare per allegare eventi a "tutti i tipi di elementi dom". Backbone.js consente anche una facile configurazione della delega degli eventi (attraverso il bubbling degli eventi) con il suo oggetto View.

In breve, se stai cercando di aggiungere una struttura al tuo JavaScript ... dipende davvero esattamente che cosa vuoi. Per cose semplici, farà un po 'di jQuery fatto a mano. Se si desidera VERAMENTE una più app in stile MVC, che ha potenziale di crescita, i framework MVC come Backbone sono la strada da percorrere.