Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Raise an event when all views in a given selector are closed #454

Merged
merged 5 commits into from Nov 10, 2014
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
9 changes: 8 additions & 1 deletion backbone.layoutmanager.js
Expand Up @@ -755,16 +755,23 @@ var LayoutManager = Backbone.View.extend({
// keep.
if (_.isArray(parentViews)) {
// Remove duplicate Views.
return _.each(_.clone(parentViews), function(view, i) {
_.each(_.clone(parentViews), function(view, i) {
// If the managers match, splice off this View.
if (view && view.__manager__ === manager) {
aSplice.call(parentViews, i, 1);
}
});
if (_.isEmpty(parentViews)){
manager.parent.trigger("removedLastViewForSelector",
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We use 2 space soft tabs, please adjust.

manager.selector);
}
return;
}

// Otherwise delete the parent selector.
delete manager.parent.views[manager.selector];
manager.parent.trigger("removedLastViewForSelector",
manager.selector);
}
},

Expand Down
42 changes: 42 additions & 0 deletions test/spec/views.js
Expand Up @@ -1704,6 +1704,48 @@ test("Allow layout to remove views", 2, function() {
equal(view.getViews().value().length, 0, "All nested views under lol removed");
});

//https://github.com/tbranyen/backbone.layoutmanager/issues/453
test("Raise an event when all views in a given selector are closed", 3, function() {

var eventCame = false;
var foundSelector = "";

var view = new Backbone.Layout({ manage: true });
view.on("removedLastViewForSelector", function (selector) {eventCame = true; foundSelector = selector;} );

var firstSubView = new Backbone.Layout({ manage: true });
var secondSubView = new Backbone.Layout({ manage: true });

view.insertView("lol", firstSubView);
view.insertView("lol", secondSubView);

firstSubView.remove();
equal(eventCame, false, "Event not yet fired");

secondSubView.remove();
equal(eventCame, true, "Event got fired");
equal(foundSelector, "lol", "Right selector was given to event");
});

//https://github.com/tbranyen/backbone.layoutmanager/issues/453
test("Raise an event when all views in a given selector are closed single view case", 2, function() {

var eventCame = false;
var foundSelector = "";

var view = new Backbone.Layout({ manage: true });
view.on("removedLastViewForSelector", function (selector) {eventCame = true; foundSelector = selector;} );
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These do not need to be a single condensed line, let em breathe on a new line :-)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

sure


var firstSubView = new Backbone.Layout({ manage: true });

view.setView("lol", firstSubView);

firstSubView.remove();

equal(eventCame, true, "Event got fired");
equal(foundSelector, "lol", "Right selector was given to event");
});

// https://github.com/tbranyen/backbone.layoutmanager/issues/238
asyncTest("Lost triggered events in cached sub-view", 2, function() {

Expand Down