Marionette ItemView如何在变化时重新渲染模型?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (108)

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

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

但是,视图未更新。

我该怎么办呢?

PS我明白,我可以在fetch done回调上调用render方法。但是当用户改变模型时,我还需要它来进行进一步的操作。

提问于
用户回答回答于

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

    modelEvents: {
        'change': 'render'
    }

代替

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

实际上,Backbone和Marionette足够聪明。 问题在于模板和数据,因为我发现了另一个问题。所以,我重新检查了一切并得到了结果。

所属标签

可能回答问题的人

  • 嗨喽你好

    7 粉丝480 提问9 回答
  • uncle_light

    5 粉丝518 提问8 回答
  • 富有想象力的人

    3 粉丝0 提问7 回答
  • 无聊至极

    4 粉丝504 提问6 回答

扫码关注云+社区

领取腾讯云代金券