javascript - 使用小部件工厂扩展时,JQuery UI Droppable 贪婪选项不起作用

标签 javascript jquery jquery-ui

当我使用小部件工厂扩展 jQuery UI 可放置小部件时,贪婪选项不再起作用。 请参阅以下JsBin

最佳答案

我调查了这个问题,问题如下:

当在元素上创建小部件时,小部件实例将作为数据属性保存到该元素,以便在必要时检索该实例。用于保存实例的关键是小部件的“widgetFullName”属性,它是小部件的命名空间和名称,例如。对于“ui-droppable”的 droppable。如果我扩展小部件并为小部件设置新的命名空间和名称,则创建的实例将使用新的命名空间名称键保存到元素中。

到目前为止一切顺利。

问题在于,在 droppable(以及其他相关小部件,如draggable、sortable 和 ddmanager)的逻辑中,使用以下选择器搜索 droppable:

":data(ui-droppable)"

“ui-droppable”是硬编码的,因此它不会找到由扩展 droppable 创建的任何实例,因为 key 不同。

我试图通过用 this.widgetFullName 替换所有硬编码的“ui-droppable”键来解决这个问题。这在 ui.droppable 的代码内部工作得很好,但在外面, this 不再引用 droppable ,因此 widgetFullName 不是正确的键。要解决此问题,需要进行更多调查并更改逻辑。

仍然有一种“肮脏”的方法来解决这个问题,但这有一个缺点:

我没有扩展小部件,而是重新定义了它:

$.widget('ui.droppable', ui.droppable, {
  extension of the widget
};

命名空间不会更改,并且会按预期工作,缺点是您重新定义了小部件,并且无法创建不同的可放置对象。

关于javascript - 使用小部件工厂扩展时,JQuery UI Droppable 贪婪选项不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29150100/

相关文章:

javascript - draggables 的 jquery 计数器(甚至更多!!!)

javascript - jQueryUI 可排序更改事件在一次更改时多次触发

javascript - 关于 :blank in regards to same origin policy 的来源

javascript - switch/if else 语句的替代方案?

javascript - 如何将具有平滑动画的scrollIntoView转换为Promise?

javascript - 如何处理 requestAnimationFrame 函数的错误

javascript - 设置一天的 CSS 设计?

javascript - JQuery:如何通过加载图像事件准备工作文档?

java - 如何从 jquery get 方法获取文本响应?

html - 如何修复 IE 7 中未出现的 UI 元素?