防止项目在其他(父/子)元素中“可丢弃”

问题描述:

我使用knockout-sortable.js让用户拖放项目给他们不同的顺序,但是当我有多个项目时遇到问题在我的页面上放置“放置区域”。我有嵌套,所有这些都是可排序的,但不是可互换。防止项目在其他(父/子)元素中“可丢弃”

我的代码:

<div class="sortable" data-bind="sortable: blueprint.pages"> 
      <tr><td>Blabla</td></tr> 
    </div> 

而在其他一些点:

<div class="sortable" data-bind="sortable: selectedPage().page_sections"> 
      <tr><td>Another blabla</td></tr> 
    </div> 

我现在可以只需拖放 '另一个布拉布拉' 到 'BLABLA',导致错误。我怎样才能防止这种情况发生?

有几种方法去这个问题。第一种是通过在淘汰赛可排序的connectClass为虚假或空(或任何时候作为一个布尔表示,等于为false):

<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> 

您也可以通过,进入jQuery的,包容的选项:

<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> 

这不像第一个解决方案,从视觉上留下箱(如果那是你的愿望)停止该项目。

+1

另一种方法是您可以在绑定中全局设置'ko.bindingHandlers.sortable.allowDrop = false;'或传递'allowDrop'。这将防止它成为任何人的目标(你仍然可以排序)。它会和'connectClass:false'有相同的影响。 –

+0

不幸的是,我还没有得到任何解决方案的运气。我想去遏制选项,但我不知道我应该用什么来取代“父母”。我尝试了我想绑定到的元素的id和class名称,但我仍然可以将它拖放到任何其他“拖放区域”中。我在这里错过了什么? – Sherlock

+0

根据文档,您应该能够传入选择器e.x. “#id”或“.sortable”。你可能也可以传入'this'。 –