Marionette ItemView如何在模型更改时重新渲染?

23

我正在使用Handlebars模板引擎。
因此,我有一个模型:

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

而且,它立即为我呈现了一个视图,这很酷。 但是在模型获取数据之后,它会触发“change”事件,因此我在控制台中看到了序列化的模型两次,并且第一次看到了空模型,然后是填充的模型。

但是,视图没有更新。

我该怎么解决?

P.S. 我知道我可以在获取数据后调用render方法。 但当用户更改模型时,我还需要它进行进一步操作。

2个回答

46

在视图中,您可以使用以下代码

    modelEvents: {
        'change': 'render'
    }

取代

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

你能指引我查找关于modelEvents的文档吗?具体来说,我正在寻找一个包含modelEvents列表及其相关解释的文档。 - splay

3

实际上,Backbone和Marionette足够聪明,可以做到这一点。
问题在于模板和数据,正如我在另一个问题中发现的那样。所以,我重新检查了一切,并得出了结果。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接