Sto provando a creare una piccola app backbone.js, ma ho problemi con l'ordine delle cose.backbone.js visualizza i rendering prima del recupero del modello
Nel mio file html, ho due blocchi di script nell'intestazione:
<script type="text/template" id="model-template">
<a href="#"><%= title %></a>
</script>
<script type="text/javascript">
jQuery(function(){
window.model.fetch();
});
</script>
Nei miei app.js, ho definito un modello semplice, vista e un router.
(function($) {
window.MyModel = Backbone.Model.extend({
url: '/mymodel'
});
window.mymodel = new MyModel();
$(document).ready(function() {
window.MyModelView = Backbone.View.extend({
template: _.template($('#mymodel-template').html()),
initialize: function() {
_.bindAll(this, 'render');
},
render: function() {
var renderedContent = this.template(this.model.toJSON());
$(this.el).html(renderedContent);
return this;
}
});
});
window.MyApp = Backbone.Router.extend({
routes: {
'': 'home'
},
initialize: function() {
this.myModelView = new MyModelView({
model: window.mymodel
});
},
home: function() {
var $body = $('body');
$body.empty();
$body.append(this.myModelView.render().el);
}
});
$(function() {
window.App = new MyApp();
Backbone.history.start({pushState: true});
});
})(jQuery);
L'applicazione è servita da una semplice applicazione sinatra. L'URL /mymodel
serve un file JSON statica:
{
"title": "My Model",
}
Quando si carica l'applicazione, ottengo un errore nella console javascript:
Uncaught ReferenceError: title is not defined
Il problema sembra essere, che la vista si rende prima il modello viene prelevato dal server. Perché?
Ieri, ho seguito i primi due screencast di backbone.js da PeepCode. Ho provato a confrontare la mia applicazione con quella che è uscita dagli screencast, ma non vedo un motivo per cui la mia applicazione voglia funzionare.
Qualche suggerimento?
Mi ci sono volute ore ... ORE per capire che questo è il motivo per cui la mia app non funzionava, funzionava alcune volte non altre, o funzionava su alcuni browser e non su altri. Tipo di errore da principiante quando pensi a come dovrebbe funzionare, suppongo. Lezione appresa. Penso che troppi esempi di Backbone utilizzino dati hard coded e concetti molto importanti come questo al margine della strada. – IcedDante