J'ai configuré un simple modèle de base et une vue à l'aide d'un modèle de soulignement. La même configuration est utilisée pour deux API distinctes.Rendu sans appel pour une API et pour une autre
API 1 fonctionne comme prévu.
Pour reproduire le problème, commentez l'url pour API 1 et décommenter l'URL pour l'API 2.
Comme vous pouvez le voir, j'ai normalisé les données de réponse pour les deux apis, la structure même de données exactes est retourné pour les deux apis. Toutefois, la méthode de rendu pour API 2 n'est pas appelée. Pour rendre les choses encore plus étranges, en de rares occasions, le rendu est appelé par l'API 2.
Qu'est-ce qui me manque ici?
// Model
var Quote = Backbone.Model.extend({
// API 1
//urlRoot: 'http://quotes.stormconsultancy.co.uk/quotes/1.json',
// API 2
urlRoot: 'http://quotes.rest/qod.json',
parse: function (data){
try{
data = data['contents'].quotes[0];
}
catch(e){
}
var rd = {author:data.author, quote:data.quote}
console.log("parsed", typeof rd, rd);
return rd;
},
// UPDATE as suggested by cory
initialize: function() {
this.on('all', function(eventName) {
console.log('QuoteModel: ' + eventName);
});
}
});
// View
var QuoteView = Backbone.View.extend({
initialize: function() {
this.template = _.template($('#quote-template').html());
this.listenTo(this.model, 'change', this.render);
},
render: function(){
console.log("render", this.model.attributes)
this.$el.html(this.template(this.model.attributes));
}
});
var quoteM = new Quote();
quoteM.fetch();
$(document).ready(function() {
\t var quoteV = new QuoteView({
\t \t el: $('#quote'),
\t \t model: quoteM
\t });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/backbone.js/1.3.3/backbone-min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/handlebars.js/4.0.5/handlebars.min.js"></script>
<script type="text/html" id="quote-template">
\t \t <p>The author is : <%= author %></p>
\t \t <p>The content is : <%= quote %></p>
</script>
<div id="quote"></div>
Merci! Je ne peux pas croire que j'ai raté ça. – arctelix
@arctelix J'ai ajouté les meilleures pratiques de Backbone à votre code dans ma réponse. –
Merci pour la nouvelle mise à jour! – arctelix