mirror of
https://github.com/TryGhost/Ghost.git
synced 2024-12-20 01:03:23 +03:00
46 lines
1.4 KiB
JavaScript
46 lines
1.4 KiB
JavaScript
|
/*global window, document, Ghost, Backbone, $, _ */
|
||
|
(function () {
|
||
|
"use strict";
|
||
|
|
||
|
Ghost.View = Backbone.View.extend({
|
||
|
|
||
|
// Adds a subview to the current view, which will
|
||
|
// ensure its removal when this view is removed,
|
||
|
// or when view.removeSubviews is called
|
||
|
addSubview: function (view) {
|
||
|
if (!(view instanceof Backbone.View)) {
|
||
|
throw new Error("Subview must be a Backbone.View");
|
||
|
}
|
||
|
this.subviews = this.subviews || [];
|
||
|
this.subviews.push(view);
|
||
|
return view;
|
||
|
},
|
||
|
|
||
|
// Removes any subviews associated with this view
|
||
|
// by `addSubview`, which will in-turn remove any
|
||
|
// children of those views, and so on.
|
||
|
removeSubviews: function () {
|
||
|
var i, l, children = this.subviews;
|
||
|
if (!children) {
|
||
|
return this;
|
||
|
}
|
||
|
for (i = 0, l = children.length; i < l; i += 1) {
|
||
|
children[i].remove();
|
||
|
}
|
||
|
this.subviews = [];
|
||
|
return this;
|
||
|
},
|
||
|
|
||
|
// Extends the view's remove, by calling `removeSubviews`
|
||
|
// if any subviews exist.
|
||
|
remove: function () {
|
||
|
if (this.subviews) {
|
||
|
this.removeSubviews();
|
||
|
}
|
||
|
return Backbone.View.prototype.remove.apply(this, arguments);
|
||
|
}
|
||
|
|
||
|
});
|
||
|
|
||
|
}());
|