backbone.js Marionette ItemView如何在更改时重新渲染模型

hsgswve4  于 2022-11-10  发布在  其他
关注(0)|答案(2)|浏览(190)

我正在使用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();
        }
    });

然后选择 puppet 项目视图:

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

它会立即为我呈现一个视图,这很酷。但在模型获取数据后,它会触发“更改”,所以我在控制台中看到了两次序列化模型,第一次看到的是空模型,然后是填充的模型。
但是,视图未更新。
我怎么能修好它?
我知道,我可以在提取完成回调时调用一个渲染方法。但是我也需要它来做进一步的操作,当用户改变模型时。

r7knjye2

r7knjye21#

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

modelEvents: {
        'change': 'render'
    }

而不是

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

ekqde3dh2#

事实上, Backbone 和 puppet 足够聪明,这样做。
问题是在模板和数据,因为我发现它another question。所以,我重新检查一切,并得到结果。

相关问题