我正在尝试使用Marionete模块使用Backbone。
例如。实施"加载微调器"正如在" contact manager" David Sulc的应用程序," backboneye" Firefox的插件显示我" Zombie View"在" Spinner"之后已被内容所取代。是真的"真实的"它拥有的僵尸" 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;
});
答案 0 :(得分:0)
你可能没有Zombie视图。
如果您的main
地区使用默认Marionette Region
type,您的观点会继承自Marionette视图类型(ItemView
,CollectionView
,CompositeView
,{{1} }),Marionette确保避免使用僵尸视图。
当视图被移出一个区域时(当你调用Layout
时会发生这种情况),spinner视图元素将从DOM中删除,所有app.main.show(itemsPageLayout)
- 样式的事件处理程序都不会被绑定。
您可以在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();
}
},
Marionette View
类型有一个destroy
方法,用于处理删除View的DOM元素和解除绑定的事件处理程序(与listenTo
绑定 - 解除绑定的事件并不简单on
)。基于vanilla Backbone.View
而不是Marionette类型的视图必须取消绑定自己的事件处理程序。无法正确执行此操作是Zombie Views的主要原因。通过使用木偶视图,您将受到保护。
如果您使用覆盖Region
的自定义Region.show
类型,则需要确保它在正在换出的视图上调用destroy
。