Search code examples
javascriptjqueryhtmlbackbone.jsmarionette

Backbone Marionette ItemView return html


I want to render marionette ItemView and append result html() to my div. My code:

 var ProjectItemView = Backbone.Marionette.ItemView.extend({
        template: "#ProjectItem",
        tagName: 'div',
    initialize: function () {
        this.model.on('change', this.life, this);
        this.model.on('change', this.render, this);
    },

    life: function () {
        alert(JSON.stringify(this.model));
    }
});


var tmp = new Project({project_id: 1});
tmp.fetch();

$('#container').append(new ProjectItemView({model: tmp}).$el);

alert in life: function shows model right. It means fetch works fine.
The question is - how to get html as result of view.
I also tried $('#container').append(new ProjectItemView({model: tmp}).render().el);

The problem was with the REST service that I use to populate collections/models. It returns array that contains one element - not plain object directly.


Solution

  • You have to react to render event from marionette.

    ...
    onRender : function() {
      $('#container').append(this.$el);
    }
    ...
    new ProjectItemView({model: tmp});
    tmp.fetch();
    

    If you want to get uncoupled, fire a distinct app event from within your view handler to the outside world. Radio might be worth considering if you're not already.