this happens because you render the model before you fetch the data from the server. That's why you see the default values. You should use listeners on model, promises or callbacks. Here's how it could be fixed:
...
var TodaysTime = new TimeModel();
TodaysTime.fetch().done(function(){Time.mainRegion.show(timeView);});
TimeView = Marionette.ItemView.extend({
template: "#template",
onRender: function() {
console.log('rendered');
TodaysTime.fetch({
success: function(apiTime) {
console.log(apiTime.attributes.time);
}
});
}
});
var timeView = new TimeView({
model: TodaysTime
});
...
Edit after you comment: Well, it really depends on your case. Some move this logic in routes for example. You can just add initialize function (but remove fetch from onRender first) to you ItemView. Something like:
initialize: function () {
this.model.on('sync', this.render, this);
this.model.fetch({ reset: true, change: true });
return this;
}