Backbonejs Marionettejs僵尸视图
我正在尝试使用Marionete模块来使用Backbone。Backbonejs Marionettejs僵尸视图
例如。像David Sulc在“contact manager”应用程序中完成的“加载微调器”一样,Firefox的“backboneye”插件在“微调器”被内容取代之后向我显示“僵尸视图”。它是“真正的”僵尸,因为它具有“isDestroyed:true”属性?
而且根据Chrome的插件 “Backbone debugger” 的观点已被删除
我应该担心吗?
这里是控制器:
define(["app", "apps/items/itemsView"], function(app, View){
app.module("ItemsApp.List", function(List, app, Backbone, Marionette, $, _){
List.Controller = {
listAllItems: function(){
require(["common/views", "entities/items"], function(CommonViews){
var loadingView = new CommonViews.Loading();
app.main.show(loadingView);
var fetchingItems = app.request("items:entities");
var itemsPageLayout = new View.Layout();
var panelView = new View.Panel();
$.when(fetchingItems).done(function(items){
var allItemsView = new View.Items({collection:items});
itemsPageLayout.on("show", function(){
itemsPageLayout.panelRegion.show(panelView);
itemsPageLayout.itemListRegion.show(allItemsView);
});
app.main.show(itemsPageLayout);
});
});
}
}
});
return app.ItemsApp.List.Controller;
});
你可能没有一个僵尸视图。
如果您main
区域使用默认Marionette Region
type和你的意见,从木偶视图类型(ItemView
,CollectionView
,CompositeView
,Layout
)继承,木偶确保僵尸视图是可以避免的。
当一个视图被换出一个区域(当您拨打app.main.show(itemsPageLayout)
时会发生这种情况),微调视图元素将从DOM中删除,并且所有listenTo
风格的事件处理程序都会解除绑定。
您可以在code for Region._destroyView
,这就是所谓的show
看到这一点:
_destroyView: function() {
var view = this.currentView;
if (view.destroy && !view.isDestroyed) {
view.destroy();
} else if (view.remove) {
view.remove();
}
},
木偶View
类型都有一个destroy
方法处理移除视图的DOM元素和解除绑定的事件处理程序(也被绑定listenTo
- 解除与on
绑定的事件并不那么简单)。基于vanilla Backbone.View
而不是Marionette类型的视图必须解除绑定自己的事件处理程序。未能正确执行此操作是僵尸视图的主要原因。通过使用Marionette Views,你受到保护。
如果您使用覆盖Region.show
的自定义Region
类型,则需要确保它在正在交换的视图上调用destroy
。