Marionette ItemView как повторно визуализировать модель при изменении


Я использую движок шаблонов рулей.
Итак, у меня есть модель:

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();
        }
    });

Затем Marionette ItemView:

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

И тогда я называю все как:

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

И, это немедленно сделать вид для меня, и это круто. Но после того, как модель получила данные, это триггер "изменение", поэтому я вижу в консоли сериализованную модель дважды, и я вижу в первый раз пустую модель, а затем заполненную.

Но представление не обновляется.

Как я могу это исправить?

P.S. Я поймите, что я могу вызвать метод render на fetch done callback. Но он также нужен мне для дальнейших действий, когда пользователь будет менять модель.

2 21

2 ответа:

В представлении можно использовать следующий код

    modelEvents: {
        'change': 'render'
    }

Вместо

   initialize: function () {
        this.model.on('change', this.render, this);
    },
    onRender: function () {
        console.log(this.model.toJSON());
     }

На самом деле, костяк и марионетка достаточно умны, чтобы сделать это.
Проблема была в шаблоне и данных, как я нашел его Другой вопрос . Итак, я все перепроверил и получил результат.