I use knockout-sortable.js to let the user drag and drop items to give them a different order, but I'm experiencing problems when I have multiple 'drop zones' on my page. I have nested sets, all of which are sortable, but not interchangeable.
My code:
<div class="sortable" data-bind="sortable: blueprint.pages">
<tr><td>Blabla</td></tr>
</div>
And at some other point:
<div class="sortable" data-bind="sortable: selectedPage().page_sections">
<tr><td>Another blabla</td></tr>
</div>
I can now just drag and drop 'Another blabla' into 'Blabla', causing errors. How can I prevent this from happening?
There are a couple ways to go about this. The first is to pass in to knockout-sortable the connectClass as false or null (or anything that is equal to false when expressed as a boolean):
<div class="sortable" data-bind="sortable: { data: blueprint.pages, connectClass: false }">
<tr><td>Blabla</td></tr>
</div>
<div class="sortable" data-bind="sortable: { data: selectedPage().page_sections, connectClass: false }">
<tr><td>Another blabla</td></tr>
</div>
You can also pass, into jQuery, the containment option:
<div class="sortable" data-bind="sortable: { data: blueprint.pages, options: { containment: 'parent' } }">
<tr><td>Blabla</td></tr>
</div>
<div class="sortable" data-bind="sortable: { data: selectedPage().page_sections, options: { containment: 'parent' } }">
<tr><td>Another blabla</td></tr>
</div>
This, unlike the first solution, will stop the item from visually leaving the box (if that's your desire).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With