Backbone - 重用视图与创建新视图

Backbone - Reusing Views vs Creating new Views

编写我的第一个 Backbone 应用程序 - 遇到了一个困境,我无法选择哪一个是前进的最佳方式。

场景:用户单击编辑按钮,加载新视图。方法如下。

    renderEditView: function(){     

       if(my.namespace.view){
             my.namespace.view.render();
       }else{
             my.namespace.view= new editView({model:my.namespace.model});
       }
    }

基本上,我将我的视图分配给命名空间变量并根据需要重新使用它。没有遇到任何问题。 但有些人提倡在单击编辑按钮时使用 new editView({model:xxx}); 再次重新创建视图。我想知道哪种做法更好,为什么?

P.S:我知道 BB 应用程序中的 'event ghosting' 问题,以及 Derick Bailey 提供的出色解决方案。但仍然很想知道两者之间的优缺点方法。

这确实是一种意见,因为如果您(正如您提到的)在您决定每次要重新渲染时都实例化一个新视图时注意清理以前的视图,那么这两种方法都可以。重要的是要避免从要通过创建新实例来替换的每个实例中复制挥之不去的事件。
就我个人而言,这两种策略我都使用过,到目前为止从未遇到过问题。
重新使用视图时,我将视图作为 属性 绑定到呈现视图的控制器对象,几乎与您使用的方式相同。
从理论上讲,如果视图之前已经创建,我看不出有理由重新实例化视图。并不是你真的需要一个新实例,只是你想重新渲染它。

旁注
对于重新渲染视图,Backbone Marionette 提供了 regions,它们是允许您执行以下操作的便利对象:

var myView = new MyView(); 
var region = new Marionette.Region({el: "#container"}); 
region.show(myView); 

如果您决定每次都实例化一个新视图,这些区域会注意正确清理以前呈现的视图。