使用widget工具扩展时,JQuery UI的Droppable贪婪选项无法正常工作

时间:2015-03-19 16:32:08

标签: javascript jquery jquery-ui

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

1 个答案:

答案 0 :(得分:1)

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

在元素上创建窗口小部件时,窗口小部件实例将作为数据属性保存到元素中,以便在必要时检索实例。用于保存实例的密钥是小部件' widgetFullName' property,即命名空间和窗口小部件的名称,例如。对于可以放弃的droppable'。如果我扩展窗口小部件并为窗口小部件设置新的命名空间和名称,则创建的实例将使用新的命名空间名称密钥保存到该元素。

到目前为止一切顺利。

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

":data(ui-droppable)"

' ui-droppable'是硬编码的,因此它无法找到由扩展dropable创建的任何实例,因为密钥不同。

我尝试通过更换所有硬编码的“ui-droppable”来解决这个问题。由this.widgetFullName创建的键。这在ui.droppable的代码中工作正常,但在此之外,这不再引用droppable,因此widgetFullName不是正确的密钥。为了解决这个问题,需要进一步调查和更改逻辑。

还有一个很脏的'解决这个问题的方法,但这有一个缺点:

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

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

命名空间不会改变,它会按预期工作,缺点是,您重新定义了窗口小部件,但您无法创建不同的可放置窗口。