Sto guardando Ember.js e sto leggendo i documenti per cercare di capire come usarlo. Ho capito (molto bene), tranne che per una cosa. Per il mio modo di pensare nel pattern MVC, il Modello è il repository per i dati nell'applicazione. Posso vedere come funziona per i dati lato client in Ember.js. Quello che non capisco è come legare quei dati al server in modo che se i dati cambiano sul client, le modifiche vengono aggiornate nel server. E viceversa. Lo sto facendo da nelle mie applicazioni web che fanno chiamate Ajax/JSON a avanti e indietro sul server, non sto ottenendo come farlo usando Ember.js.ember.js e il server
risposta
Gli scavi appena un po 'in giro emberjs on GitHub Ho trovato questo: https://github.com/emberjs/data:
Ember dei dati è una libreria per i modelli di carico da uno strato di persistenza (come ad esempio un'API JSON), aggiornamento di tali modelli, quindi il risparmio i cambiamenti. Fornisce molte delle funzionalità che si possono trovare negli ORM lato server come ActiveRecord, ma è progettato specificamente per l'ambiente unico di JavaScript nel browser.
Suggerirei anche di leggere Ember.js Live Collections. Quello che vuoi è quello di avere una collezione di modelli che saprà come sincronizzare con lato server, possibile codice di esempio è:
// our model
App.Person = Ember.Object.extend();
App.people = Ember.ArrayController.create({
content: [],
save: function() {
// assuming you are using jQuery, but could be other AJAX/DOM framework
$.post({
url: "/people",
data: JSON.stringify(this.toArray()),
success: function (data) {
// your data should already be rendered with latest changes
// however, you might want to change status from something to "saved" etc.
}
});
}
});
Farebbe quindi chiamare App.people.save()
in occasioni necessari.
Assicuratevi inoltre di dare un'occhiata a questo articolo, Advice on & Instruction in the Use Of Ember.js, che approfondisce la comunicazione server-client con Ember e menziona anche emberjs/data.
Nota: la libreria di dati Emberjs deve essere utilizzata con cautela per il fatto che non è pronta per la produzione.
In Ember.js, il "modello" contenuto nell'oggetto Ember
conterrà un'ulteriore astrazione di un database lato server sottostante, se ne stai utilizzando uno. La parte controller dell'applicazione deve quindi disporre di metodi che consentono di recuperare e inviare dati che vengono richiamati quando necessario per aggiornare il modello (utilizzando Ajax). Questo è bello perché hai un modello che può rispondere rapidamente dal lato client a qualsiasi input che un utente fornisce all'applicazione (sequenze di tasti, movimenti del mouse e così via) e scegliere selettivamente quando effettuare query relativamente costose su un database lato server, ad esempio. In questo modo, alcune delle prestazioni dell'app non sono più ostacolate dalla latenza delle richieste di dati verso un server esterno, che in alcuni casi può consentire di creare applicazioni la cui reattività si avvicina a quella delle app native.
DOM è Documento Modello oggetto e si riferisce in genere alla rappresentazione ad albero di elementi HTML (o XML) e alla sua API. Nel modello Ember.js non è sicuramente memorizzato nel DOM e non è una buona idea memorizzare i tuoi dati in DOM - DOM è la parte più lenta dell'API del browser JavaScript. Potresti forse memorizzare i binding in DOM (come fa knockout.js), ma non il modello stesso. Questo è il motivo per cui tutto il passaggio da jQuery viene fatto al momento - per non memorizzare lo stato dei dati e dei dati stessi nel DOM. –
@gryzzly - eventuali riferimenti all'articolo/discussione al DOM sono più lenti e problemi con jQuery? – theringostarrs
Forse per il tuo utilizzo, jQuery e DOM vanno bene! Quando leggo per la prima volta la descrizione di BackboneJS: "Quando si lavora su un'applicazione Web che coinvolge molto JavaScript, una delle prime cose che si impara è quella di smettere di legare i dati al DOM.È fin troppo facile creare applicazioni JavaScript che finiscono come pile aggrovigliate di selettori e callback jQuery, il tutto cercando freneticamente di mantenere i dati sincronizzati tra l'interfaccia utente HTML, la logica JavaScript e il database sul server. Per le ricche applicazioni lato client, un approccio più strutturato è spesso utile. "Corrisponde esattamente ai miei pensieri. –
mi piace immaginare Ember.js in coppie come questo
- Visualizzazioni e modelli sono correlati (ovviamente), modificare il Visualizzazioni-Class per il controllo del modello (come i classnames)
- Router e Percorsi funziona un po 'come il controller in MVC. Sono responsabili per il routing della richiesta all'endpoint corretto
- Controller e Modello sono centrati sul modello, uno (il Modello) descrive i dati che gestirai nella tua applicazione mentre il controller si comporta come un tipo di proxy (o decoratore, se questo è più in alto nel tuo vicolo).Modelli saranno collegare al controllore per esempio e
Fondamentalmente questo significa si carica il controller (singola o array) con un modello e ora possibile modellizzare i processi di lavoro su tale modello (cioè il materiale che non fa toccare il modello nel suo nucleo/dati) nel controller. Per un'applicazione blog esempio si descriverebbe la post nel modello e aggiungere qualcosa di simile per il controller
App.PostController = Ember.ObjectController.extend({
content: null,
// initial value
isExpanded: false,
expand: function() {
this.set('isExpanded', true)
},
contract: function() {
this.set('isExpanded', false)
}
});
Ora è possibile interagire con il represenation del modello in termini di frontend pensiero attraverso il controller . Espandere un post o meno non cambia il modello, solo cambiando i dati.
In termini di ricaricare i dati dal server, ho due risposte per te
- ho trovato this article molto utile per comprendere le connessioni (e semplici sondaggi, anche se semplice)
- Se stai usando Rails, si ottengono fortunati con le prossime Rails 4 dal vivo, vedere this post and demo per le parti succose
mi rendo conto che è un po 'vecchio di una domanda, ma è sulla pagina più quotato per ember.js, così ho ho pensato di aggiungere un po '.
Ultimamente ho utilizzato ember-model per gestire l'associazione di dati RESTful. Ha meno campane e fischietti, ma per i miei bisogni è abbastanza decente. Fondamentalmente, si estende semplicemente la funzionalità del modello per integrarsi abbastanza bene con un server che spinge oggetti JSON attraverso un'interfaccia REST standard.
Grazie per l'ottima risposta, molto utile e l'articolo di riferimento mi sarà utile. In un certo senso, il modo in cui Ember.js viene utilizzato sul lato client è un po 'come il modello Mediatore/Collega, utile per gestire le modifiche nelle finestre di dialogo di una GUI. I tuoi suggerimenti sopra mi aiuteranno a mettere insieme questo tipo di cose per mantenere sincronizzato il server/client. Ancora una volta, grazie mille! –
Non penso che i dati dell'ember dovrebbero essere messi in uso al momento, dal momento che è chiaramente indicato che è la parte LAVORI IN CORSO e UNDER RAPID DEVELOPMENT per emberjs. Penso che un'alternativa stabile sarà grande. –
@random il link a trek è decisamente utile lì, ha un link a una vecchia versione di un articolo che è molto educativo e dà alle persone l'idea di come fare comunicazione client-server in ambra. Rimettendolo. –