Domanda

Stiamo sviluppando un'applicazione considerevolmente grande utilizzando il framework Ruby on Rails (sistema CRM) e stiamo valutando di riscriverla per usare ExtJS in modo che Rails esegua semplicemente la gestione dei dati, mentre ExtJS farebbe tutto il lavoro pesante del browser in un desktop- allo stesso modo.

Qualcuno ha qualche esperienza e suggerimenti su quale sarebbe l'approccio migliore? ExtJS è abbastanza maturo per essere utilizzato in applicazioni relativamente grandi (e complesse)? E che dire della parte di Rails: quale sarebbe l'approccio migliore qui?

EDIT:

Giusto per chiarire. Preferirei farlo in modo che tutto il codice dell'applicazione lato client javascript sia caricato in una sola volta (all'avvio dell'applicazione, in modo ottimale come un file js compresso) e quindi utilizzare ajax per inviare dati da e verso Rails app. Inoltre, sarebbe bello avere ERB disponibile per la generazione dinamica degli elementi di applicazione Ext.

È stato utile?

Soluzione

Al momento ho un'app desktop di dimensioni estremamente grandi scritta in ExtJS. Funzionava in cima al framework Catalyst MVC di Perl, ma una volta che l'intero layer View è stato convertito in un desktop basato su ExtJS ho iniziato a migrare verso i modelli e i controller di Ruby on Rails. È altrettanto veloce, se non più veloce, e più facile da mantenere e ha una base di codice molto più piccola.

  • Assicurati di aver impostato la configurazione del tuo record attivo in modo che non includa il nome radice del modello nel json, in modo che JsonStore di Ext non abbia problemi a leggere i record. C'è un'opzione su ActiveRecord BASE chiamata include_root_in_json che devi impostare su false.

  • Assicurati di definire correttamente le tue classi di applicazione in Ext e massimizza il riutilizzo del codice e vorrai una sorta di metodo per ripulire i nodi inutilizzati nel DOM. Le prestazioni JavaScript possono essere una vera seccatura a meno che non si stiano utilizzando le ultime versioni di Safari o Firefox 3.1.

  • Probabilmente avrai bisogno di una sorta di metodo di memorizzazione nella cache per i dati sul server da offrire alla tua applicazione in formato JSON al momento del caricamento della pagina. Ciò ridurrà il numero di viaggi di andata e ritorno tramite Ajax.

  • Sicuramente usa gli oggetti WindowManager e StoreManager di Ext, oppure creane uno tuo da Ext.util.MixedCollection

  • Sviluppa il tuo codice in file separati e gestibili, quindi esegui un processo di generazione che li combini in un singolo file, quindi esegui il compressore YUI o il Dean Edwards Packer su di esso per comprimere / offuscare il file. Servi tutti i file JS e CSS nei loro singoli file, inclusi quelli forniti da Ext.

Altri suggerimenti

[aggiornamento 2012] ExtJS è stato acquisito da Sencha, che offrire una licenza GPLv3 e due licenze commerciali.

[commento di ottobre-2008] ExtJS è eccezionale sotto il profilo tecnico, ma il fiasco con le licenze di diversi mesi fa mi ha portato a guardare altri framework - non mi fido affatto dei creatori di ExtJS. Non mi piace il modo in cui hanno formulato la loro licenza e come hanno fatto finta di essere sostenitori dell'open source mentre ovviamente tentavano di trarre ingiustamente profitto da coloro che credevano in loro.

Sono solo contrario all'utilizzo di ExtJS per motivi morali.

Questo appartiene alla risposta al commento di Milano sulla mia precedente risposta, ma come nuovo arrivato qui non ho abbastanza punti reputazione per rispondere lì:

Si è verificato un problema con " sp non è definito " ;, che era il risultato della memorizzazione nella cache dei file JavaScript di Rails in un file di grandi dimensioni (altrimenti ci sarebbero diverse centinaia di file). La memorizzazione nella cache ha introdotto alcuni strani bug con nuove righe che hanno gettato via tutto. Questo mi ha fatto strappare i capelli per un po ', ma la soluzione era aggiornare Ruby dall'1.6.6 (livello di patch 72) all'ultima 1.8.7. Ciò ha risolto il problema, quindi per favore controlla di nuovo se vuoi dare un'occhiata (dovrai fare un aggiornamento completo per battere la memorizzazione delle risorse nella cache).

Sono contento che tu abbia mai incontrato le cose Ext MVC prima. Al momento posso pienamente credere che debba essere abbastanza difficile da capire, principalmente a causa della mancanza di esempi, tutorial e demo. Il codice stesso è ragionevolmente ben documentato tuttavia (almeno il codice più recente, ce ne sono molti che devono essere chiariti).

Sono attualmente in fase di refactoring di alcune classi chiave prima che sia pronto per una corretta "versione". Quando sarà pronto (sto pensando un paio di settimane), genererò la documentazione e creerò un sito veloce con alcune demo e un codice di esempio. Quando avrò finito, pubblicherò un post sul mio blog ( http://edspencer.net ).

Il mio obiettivo è quello di cercare di fornire un framework che renderà molto più semplice la scrittura di questo tipo di applicazione e di stabilire alcune convenzioni. Al momento non esiste un consenso o un modo predefinito di strutturare le applicazioni ExtJS, quindi tutto ciò che possiamo fare per spostarci sarà un passo nella giusta direzione! Commenti e contributi sono più che benvenuti.

Ho distribuito con successo un'app RoR / ExtJS di grandi dimensioni del tipo che descrivi ("AJAX lato client" basato sul client). Ext_scaffold è praticamente un'aringa rossa.

Non è troppo faticoso per far funzionare insieme RoR ed ExtJS senza problemi. La scelta fondamentale è se estendere ExtJS a "speak Rails", patch RoR a "speak ExtJS" o incontrarsi nel mezzo. Dipenderà da dove sono le competenze della tua squadra.

Ho adottato la strategia meet-in-the-middle, che include:

  • Estendi Ext.data.Store e Ext.data.Record per conoscere le convenzioni di routing di Rails
  • Hack Ext.grid.EditorPanel e Ext.form.BasicForm per giocare bene con le associazioni ActiveRecord
  • Scrivi alcuni moduli per estendere ActiveRecord :: Base e ApplicationController per eseguire semplicemente il commit da Ext.grid.EditorPanel e Ext. form.BasicForm

È praticamente tutto.

Detto questo, ci sono degli svantaggi per ExtJS.

  • Dovrai sporcarti le mani negli interni. Non lasciarti sedurre dalle demo.
  • La documentazione della community è scarsa e incentrata su PHP.
  • Provenendo dal mondo RoR incentrato su Github / Lighthouse, usare VBulletin è come svegliarsi nel 1998. Voglio dire, non esiste un bugtracker pubblico solo un post sul forum che viene aggiornato (WTF?).
  • Il codice è un po 'troppo ingegnerizzato.
  • Il team ha perso credibilità Open Source, quindi ha perso ossigeno Open Source.
  • Il team sembra essere focalizzato sull'integrazione con GWT (qualcuno può dire " enterpri $ ey " ;?).

Potresti dare un'occhiata al framework Netzke che si pensa faccia proprio questo: facilitare la creazione di complesse applicazioni web a una pagina con l'accento sull'approccio modulare.

I vantaggi di Netzke sono:

  • Riusabilità ed estensibilità del codice. Una volta realizzato il componente (lato client e server), è possibile riutilizzarlo in qualsiasi luogo, combinarlo con altri componenti o estenderlo in caso di eredità.

  • efficienza. La classe per ogni componente viene caricata dal server (e valutata) una sola volta, il che consente di risparmiare molto tempo sulla comunicazione server-client.

  • È open source ed è in sviluppo attivo. Ha dimostrazioni dal vivo e codice di esempio.

  • Ha componenti predefiniti che puoi usare immediatamente senza nemmeno toccare Ext JS (configurali in Rails)

  • È stato utilizzato (dal suo autore) per lo sviluppo nella vita reale di un'applicazione logistica complessa.

Gli svantaggi di Netzke sono:

  • Il codice è ancora giovane e la community piccola.

Se sei interessato, dai un'occhiata alla descrizione e ai dettagli di progettazione qui: https: // github.com/nomadcoder/netzke-core

Demo / tutorial live sono disponibili qui: http://netzke-demo.herokuapp.com e qui: http://yanit.heroku.com

Ext è decisamente abbastanza maturo per gestire questa situazione. Attualmente sto lavorando a un progetto Rails con molti Ext, e la parte più difficile ha sicuramente lavorato con il to_json di Rails per rendere JSON che Ext possa leggere (per array, hash, modelli, che non è riuscito convalida, ecc.)

Dai un'occhiata al plug-in ext_ scaffold per Rails. Ho iniziato con questo e ho eliminato le sue estensioni ActiveRecord / ActionView fino a quando non ha fatto ciò di cui avevo bisogno.

Ho esperienza con ExtJS anche con Rails. L'uso del framework è un ottimo modo per ottenere gratuitamente alcuni widget dall'aspetto gradevole. La convenzione REST dovrebbe adattarsi bene anche al framework se lo si utilizza per sviluppare applicazioni a pagina singola. Funziona bene anche con RJS.

Ecco i miei problemi con l'utilizzo del framework

  1. Non puoi davvero usare il flash [: notice] poiché ricaricare un'applicazione a pagina singola è sciocco. In questo modo passare avvisi e messaggi di convalida è un lavoro ingrato poiché è necessario utilizzare i metodi RJS / javascript per mostrarli.

  2. Non puoi usare ERB molto, quindi devi incapsulare molta della logica nei callback json.

Ho implementato ExtJS e Rails per una serie di applicazioni e sicuramente possono essere fatti dialogare tra loro. Abbiamo creato una breve demo di un'app che stiamo attualmente sviluppando in Rails + Ext all'indirizzo http: / /demo.domine.co.uk/admin . Ignora il front-end per ora poiché non è completo: la sezione di amministrazione è sostanzialmente terminata e puoi accedere con:

nome utente: edward password: rarrar

Dato che la demo non è ancora completamente finita, non garantirò che funzioni correttamente con qualsiasi cosa diversa da Firefox in questa fase. Non c'è motivo per cui non funzioni in altri browser, non ho ancora passato del tempo a testarli. Il punto è più sull'integrazione con le rotaie.

Ogni applicazione nel menu di avvio interagisce con il back-end di Rails tramite JSON. Ho scritto un plug-in Rails di base per fare la maggior parte del lavoro per noi lì. A breve rilascerò il codice dietro quello, ma per ora si spera che dia un'idea di come queste due tecnologie possano lavorare insieme ...

Anche se non ho esperienza di ExtJS (oltre a leggere nel " Progetti di guide pratiche " libro) Ho usato un jQuery Flexigrid con jrails per avere un aspetto più desktop.

Ha funzionato abbastanza bene.

Ok. Uso extjs gxt gwt su molti progetti ed è molto facile da sviluppare. Ma voglio dirti che ho costruito il mio progetto con extjs + gwt (gxt), non sono sicuro di Ruby. testo del link

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top