diff --git a/agility.js b/agility.js index 0450f1c..1f1aedd 100644 --- a/agility.js +++ b/agility.js @@ -660,6 +660,9 @@ // Triggered upon removing self _destroy: function(event){ + // destroy any appended agility objects + this._container.empty(); + // destroy self this.view.$().remove(); }, diff --git a/test/public/core.js b/test/public/core.js index 47fc305..fadd93d 100644 --- a/test/public/core.js +++ b/test/public/core.js @@ -316,6 +316,41 @@ equals( ob.view.$( 'span' ).last().html(), 'postHookEventLastLast', 'last postHook event fired last'); }); + test("Destroy propagates to children", function() { + var destroyTriggered = false; + var childDestroyTriggered = false; + var grandchildDestroyTriggered = false; + var greatgrandchildDestroyTriggered = false; + var obj = $$({}, '
', { + 'destroy': function() { + destroyTriggered = true; + } + }); + var child = $$({}, '', { + 'destroy': function() { + childDestroyTriggered = true; + } + }); + var grandchild = $$({}, '', { + 'destroy': function() { + grandchildDestroyTriggered = true; + } + }); + var greatgrandchild = $$({}, '', { + 'destroy': function() { + greatgrandchildDestroyTriggered = true; + } + }); + obj.append( child ); + child.append( grandchild ); + grandchild.append( greatgrandchild ); + obj.destroy(); + ok(destroyTriggered, "destroy triggered"); + ok(childDestroyTriggered, "child destroy triggered"); + ok(grandchildDestroyTriggered, "grandchild destroy triggered"); + ok(greatgrandchildDestroyTriggered, "great grandchild destroy triggered"); + }); + test("Extend controller syntax from four arguments (prototype, model, view, controller object)", function() { var lbl = $$({}, ''); var partial = $$({}, '', {