Marionette ItemView how to re-render model on change
Asked Answered
U

2

23

I'm using Handlebars template engine.
so, I have Model:

Backbone.Model.extend({
        urlRoot: Config.urls.getClient,
        defaults: {
            contract:"",
            contractDate:"",
            companyTitle:"",
            contacts:[],
            tariff: new Tariff(),
            tariffs: [],
            remain:0,
            licenses:0,
            edo:""
        },
        initialize:function(){
            this.fetch();
        }
    });

then Marionette ItemView:

Marionette.ItemView.extend({
        template : templates.client,
        initialize: function () {
            this.model.on('change', this.render, this);
        },
        onRender: function () {
            console.log(this.model.toJSON());
         }      
    });

and then I call everything as:

new View({
    model : new Model({id:id})
        })

and, it's immediately render a view for me and this is cool. But after the model fetched data it's trigger "change", so I see in console serialised model twice, and I see for first time empty model and then filled one.

But, the view is NOT updated.

How I can fix it?

P.S. I understand, that I can call a render method on fetch done callback. But I also need it for further actions, when user will change model.

Unrealizable answered 1/6, 2013 at 20:30 Comment(0)
U
3

Actually, Backbone and Marionette are smart enough to do it.
Problem was in template and data as I found it another question. So, I re-checked everything and got result.

Unrealizable answered 2/6, 2013 at 10:34 Comment(0)
P
46

In the View, You can use following code

    modelEvents: {
        'change': 'render'
    }

instead of

   initialize: function () {
        this.model.on('change', this.render, this);
    },
    onRender: function () {
        console.log(this.model.toJSON());
     }
Pedroza answered 4/6, 2013 at 15:59 Comment(1)
can you point me to the documentation around modelEvents? Specifically, I am looking for a list of modelEvents and their associated explanationKenwee
U
3

Actually, Backbone and Marionette are smart enough to do it.
Problem was in template and data as I found it another question. So, I re-checked everything and got result.

Unrealizable answered 2/6, 2013 at 10:34 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.