模型更改事件:绑定Region.show或View.render?

时间:2013-07-08 20:53:53

标签: marionette

我有一个模型,我从服务器获取然后渲染视图。我应该使用模型的更改事件将对区域的show方法的调用绑定吗?

  menuModel.bind("change" , function(){
            leftMenuRegion.show(leftMenu);
        });
        menuModel.fetch();

但是当再次获取模型时会发生什么? 或者我应该第一次获取模型,调用区域的show方法然后将视图的渲染方法绑定到模型的更改事件?

  menuModel.fetch(); 
  leftMenuRegion.show(leftMenu);     
  menuModel.bind("change" , function(){
                leftMenu.render();
   });

此外,请在下面的实例化视图时,请咨询是否在这种情况下,是否可以/建议听模型的变更事件。

initialize : function() {
  this.bindTo(this.model, 'change', this.render, this);
},

通过调用区域的节目和有时候视图的渲染来渲染视图是不是不一致?请告知编码标准应该是什么?

1 个答案:

答案 0 :(得分:3)

视图显示模型,应该是监听“更改”事件的模型。您可以使用initialize方法(在视图中)执行此操作:

initialize : function() {
  this.listenTo(this.model, 'change', this.render);
}

您只能使用区域show方法来指示该区域应显示的视图。除非您想在该区域中显示不同的视图,否则不要再次调用它。

要等待在显示视图之前获取模型数据,您可以使用延迟,如下所述:http://davidsulc.com/blog/2013/04/01/using-jquery-promises-to-render-backbone-views-after-fetching-data/(注意fetch返回一个延迟对象,因此您可以使用价值作为你的承诺)。

要仅调用render一次,请使用延迟来延迟显示区域中的视图。然后,调用menuModel.fetch({ silent: true });,这将阻止在收到数据时触发“更改”事件。