2013-08-01 11 views
9

Uso require.js per eseguire il caricamento lazy di un'app JavaScript. Mi piacerebbe passare a una pila di meteoriti ma al momento sembra che Meteor mandi tutta l'app (tutti i modelli) sul carico iniziale. Qualcuno ha avuto successo con require.js e meteora o qualsiasi altra implementazione?Modelli di caricamento pigri in Meteor

risposta

5

Stai facendo domande diverse, ma sicuramente sono collegate. Il primo riguarda il caricamento di un ulteriore codice javascript nell'app meteorica. Ovviamente puoi usare cose come requirejs. Questo dovrebbe funzionare correttamente supponendo che il tuo codice pigro si trovi nella directory public del tuo progetto meteor. Tuttavia, la mia esperienza è che requirejs impazzisce quando il contenuto di public viene aggiornato spesso, quindi ad esempio nell'ambiente di sviluppo. Forse è una questione di personalizzazione della libreria, ma preferirei consigliare l'uso di un pacchetto homebrewed leggero. Guarda here, se hai bisogno di ispirazione.

La seconda domanda riguarda la definizione del modello lazy. Ogni modello è composto da due parti. Il primo è il suo codice html, scritto nella sintassi handlebars, il secondo è tutto il codice javascript che scrivi per definire come deve comportarsi il tuo modello (ad esempio aiutanti, gestori di eventi). La seconda parte è facile, purché si presuma che sappiamo già come caricare il codice pigro (vedere il paragrafo precedente) e il modello, chiamiamolo myLazyTemplate, è già definito, quindi in pratica Template.myLazyTemplate non è undefined. Quindi, come raggiungere il secondo?

Per definire dinamicamente un nuovo modello è necessario chiamare Template.__define__(name, raw_func) sul client. Quindi l'ultima domanda è "che cos'è raw_func?". Questa è una versione compilata del codice html che normalmente viene creato automaticamente sul server e poi ha fatto scendere il filo al client quando l'applicazione viene caricato (guardare here per vedere come è fatto in meteora). Ma vogliamo farlo dinamicamente, giusto?

Quindi l'idea è di compilare manualmente il codice modello con l'aiuto della routine . Puoi alimentarlo con il tuo codice codice HTML e l'output è un po 'di javascript array che può essere inviato al client in qualsiasi momento dal metodo di cui abbiamo già parlato. L'ultima cosa che devi fare è chiamare Handlebars.json_ast_to_func sul client, usando i dati inviati dal server come unico argomento. L'output prodotto da Handlebars.json_ast_to_func è lo raw_func che è possibile utilizzare per produrre il modello myLazyTemplate.

Sono consapevole che questa è solo un'idea approssimativa, non l'intera soluzione al problema. Spero che questo ti aiuterà a capire da solo la soluzione finale.

+0

Grazie per una risposta molto dettagliata, era solo il livello di descrizione che stavo cercando. – James

+1

Questa risposta è probabilmente obsoleta. Vedi [come caricare i modelli pigri su richiesta in Meteor] (https://stackoverflow.com/a/28334315/1269037) e i pacchetti disponibili per questo a partire da febbraio 2015. –

Problemi correlati