Se l'unico codice JavaScript che si sta per scrivere è l'accesso a JSON esterno, quindi sconfigge il punto di utilizzo del compilatore. Tuttavia, se hai anche una piccola quantità di JavaScript che funziona oltre a analizzare il tuo json in modelli di dominio, allora il compilatore può essere utile.
Nel nostro parser accediamo ai nostri dati tramite notazione della parentesi così possiamo ottenere i dati correttamente. Da lì inseriamo i dati nei nostri modelli, che utilizziamo. notazione su Questi vengono ribattezzati selvaggiamente, ci danno il controllo del tipo e tutta quella bontà.
Modifica >> Per i dati, utilizzo lo XHRManager. Questa è una classe seriamente carina. Quando ricevo un evento di dati da quel pool, lo gestisco come segue.
/**
* @private
* @param {goog.events.Event} evt The event recieved from the XhrIo.
*/
mypath.MyClass.prototype.onDataRecieved_ = function(evt) {
if (evt.type != 'complete') return;
var xhrIo = evt.target;
var data = xhrIo.getResponseJson();
//do somethign!
};
Devo avvertirvi, la mia gestione XHRManager lascia ancora un bel po 'a desiderare. Ho solo rifattorizzato il mio codice la scorsa settimana per iniziare a usarlo.
Per l'analisi mi fare questo: (Questo è un certo roba grezza dalla mia base di codice, in modo da ignorare alcuni del brutto.)
our.class.path.ContestJsonParser.prototype.setContestProperties =
function(contest, element) {
contest.setName(element['description']);
/**
* @type {!number}
*/
var timeAsInt = element['startTime'];
contest.setScheduledStartTime(timeAsInt);
var clockModel = contest.getClockModel();
if (goog.isDefAndNotNull(element['period'])) {
clockModel.setMatchState(element['period']['periodName']);
clockModel.setStateStartTime(element['period']['periodStartTime']);
}
//TODO (Johan) this needs to change today to consider the rest of the stats
//information
var stats = element['statistics'];
if (goog.isObject(stats) && goog.isDefAndNotNull(stats['score'])) {
var score = stats['score'];
contest.setMatchScore(score['home'], score['away']);
} else {
contest.setMatchScore(undefined, undefined); // clears score.
}
};
Ti serializzare costantemente i vostri dati tramite JSON.stringify e JSON.parse? questo è estremamente inefficiente, qual è la ragione per cui lo fai. Il mio codice non ha senso per te nel contesto, ma separiamo la creazione del modello dall'analisi utilizzando il modello di build http://en.wikipedia.org/wiki/Builder_pattern. Onestamente penso che il nocciolo del tuo problema potrebbe essere il tuo uso di stringify + parse, spiegami cosa stai cercando di risolvere con questo. – lennel
Sì, uso il serializzatore nativo. Qual è l'opzione migliore? Ho letto da qualche parte che usare una libreria è più lento rispetto all'utilizzo di un'analisi nativa. Gli oggetti vanno e vengono via ajax e anche da e verso la memoria locale. – frenchie
Ho appena modificato il mio commento, ricontrollare e spiegarmi perché usi Json.stringify e Json.parse per tutto il tempo. – lennel