Gridstack.js: On Removed never called

Created on 1 Mar 2017  路  10Comments  路  Source: gridstack/gridstack.js

I have this

var options = {
                cellHeight: 200,
                width: 5,
                height: 4,
                verticalMargin: 4,
                float: true,
                removable: '.remove-area',
                removeTimeout: 100
            };
            $('.grid-stack').gridstack(options);

that initialises the grid the way i want it...fine...
I have an div with a class .remove-area
the drag and drop to remove procedure is working, if i drag a widget it gets removed, but...

if i do this (as described in the docs)

$('.grid-stack').on('removed', function(event, items) {
                console.log(items);
            });

this function never gets called.
Any ideas?

enhancement

Most helpful comment

I did a nasty workaround, tweaked onEndMoving() in the gridstack.js

 if (node._isAboutToRemove) {
                forceNotify = true;
                el.removeData('_gridstack_node');
                el.trigger('widget-removed') // My line
                el.remove();
            }

and then

        $('.grid-stack').on('widget-removed', '.grid-stack-item', function() {
            console.log($(this));
        });

That way it works on dynamic items

All 10 comments

Same problem here.

You can bind a jquery remove event on the child elements.

e.g $(".grid-stack-item").on("remove",function(){
console.log(this)
})

something like that should do the trick. If you are referencing it to a object just assign a id on each element. Which you can do with the addWidget function (last param), and then use jquery's attr function to compare.

I did a nasty workaround, tweaked onEndMoving() in the gridstack.js

 if (node._isAboutToRemove) {
                forceNotify = true;
                el.removeData('_gridstack_node');
                el.trigger('widget-removed') // My line
                el.remove();
            }

and then

        $('.grid-stack').on('widget-removed', '.grid-stack-item', function() {
            console.log($(this));
        });

That way it works on dynamic items

@MarkoIvanetic It's working,thank you ~~~~,so that i can get the data-gs-id and do my operating

@MarkoIvanetic Nice solution, i allowed me to find the problem.
.remove() in jquery doesn't trigger the .on("remove") event. you have to explicitly call .trigger('remove')

You don't need to create a new trigger. you just need to use the existing one like this.

if (node._isAboutToRemove) { forceNotify = true; el.removeData('_gridstack_node'); el.trigger('remove').remove(); }

and then in your code do this
$('.grid-stack').on('remove', '.grid-stack-item', function() { console.log($(this)); });

This fixes the problem without adding a new trigger. I'm going to create a pull request for this and hopefully it will be included in the next version. The fact is that i want to use this trough a cdn and don't want to host the custom .js locally. But for now it will do.
Thank you for your help.

@RobertoBiundo good job man. without creating new trigger.

Still now that it's modified i cant use it with bower.

Thanks this is a better solution :).

Just to let you guys know that i already created a pull request and hopefully this will be included soon and @MarkoIvanetic can start using it with bower.
https://github.com/troolee/gridstack.js/pull/622

Fixed in develop branch. Will go live in v0.3.0 later today.

Was this page helpful?
0 / 5 - 0 ratings

Related issues

alissondiel picture alissondiel  路  6Comments

GeniusWiki picture GeniusWiki  路  3Comments

jpotth picture jpotth  路  4Comments

ascendantofrain picture ascendantofrain  路  6Comments

cblokker picture cblokker  路  6Comments