【问题标题】:Prevent items to be 'droppable' in other (parent/child) elements防止项目在其他(父/子)元素中“可放置”
【发布时间】:2012-09-06 15:28:04
【问题描述】:

我使用 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>

我现在可以将“Another blabla”拖放到“Blabla”中,从而导致错误。我怎样才能防止这种情况发生?

【问题讨论】:

    标签: knockout.js knockout-sortable


    【解决方案1】:

    有几种方法可以解决这个问题。第一个是将可淘汰排序的 connectClass 传递为 false 或 null(或任何等于 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>
    

    这与第一个解决方案不同,它将阻止物品从视觉上离开盒子(如果这是您的愿望)。

    【讨论】:

    • 另一种方法是您可以全局设置ko.bindingHandlers.sortable.allowDrop = false; 或在绑定中传递allowDrop。这将防止它成为任何人的目标(您仍然可以在其中排序)。它会产生与connectClass: false 相同的效果。
    • 不幸的是,我对这两种解决方案都没有运气。我想选择遏制选项,但我不确定应该用什么替换“父级”。我尝试了我想绑定它的元素的 id 和类名,但我仍然可以将它拖到任何其他“放置区”中。我在这里错过了什么?
    • 根据文档,您应该能够传入选择器,例如“#id”或“.sortable”。你也可以传入this
    猜你喜欢
    • 2017-10-04
    • 1970-01-01
    • 2012-06-13
    • 2012-11-02
    • 1970-01-01
    • 2013-06-19
    • 1970-01-01
    • 2014-04-19
    • 1970-01-01
    相关资源
    最近更新 更多