2

我该怎么做这样的事情?我需要完全禁用小部件,这意味着应该禁用所有实例,并且禁用后不能创建更多实例。我尝试搜索,但没有任何结果。

将不胜感激任何帮助。

编辑:

一个更生动的例子。

比如说,我将我的小部件的三个实例放在三个元素上。然后我想关闭我的小部件。我调用了一个静态方法turnOff,这导致a)所有工作实例被禁用b)如果以后通过ajax调用它们,则禁止创建该小部件的任何其他实例,即然后我希望它再次工作,所以我调用一个打开()。

我的小部件是一个提示插件,所以如果用户关闭提示,它们应该在所有地方都关闭,并且应用程序中的某些地方仍然异步加载页面的提示部分。

这几乎就是我需要做的。

4

1 回答 1

1

答案取决于您的小部件在不活动时是否明显——例如,如果它是在悬停时显示的“提示”类型工具提示,那么您需要做的就是在工具提示不活动时不显示。但是,如果它还添加了格式以显示提示的位置,您也需要撤消它。

让我们先来看一个简单的例子——假设我们有一个简单的小部件,当鼠标悬停在元素上时filler,它只添加了一个类 ( )。filled然后在全局范围内有一个变量:

enableFiller = true;

然后在您的小部件中检查:

$.widget( "spacedog.filler", {

    _create: function() {
        var progress = this.options.value + "%";
        this.element.hover(
            function() {
                if (enableFiller) { 
                    $(this).addClass("filled");
                }
            },
            function() {
                $(this).removeClass("filled");
            }
        );
    }

});

小提琴

请注意,我不检查中的标志,removeClass因为当鼠标悬停在小部件上时,小部件可能会被禁用,并且您可能不希望悬停颜色意外“粘在”上。

从那里很容易扩展到您的小部件即使在关闭时也会改变元素的情况。我将逻辑作为伪代码:

  • 创建小部件时base-widget,向元素添加一个类(即使不活动)
  • 如果小部件在添加active-widget类并执行所需的任何操作

  • 要关闭active-widget从所有基本小部件中删除类:$(".base-widget").removeClass('active-widget'). 您可能还需要对所有元素进行一些其他更改——但它们很容易找到。

  • 要打开添加active-widget课程并调整其他所有内容

您可以将打开/关闭功能嵌入到小部件中,只要它使用全局变量作为标志。有关存储全局变量的其他选项,请参阅此答案:如何在 JavaScript 中声明全局变量?

如果您遇到困难,您可以发布(简化版本)您的小部件代码以及您迄今为止尝试过的内容,有人可能会提供进一步的帮助。

于 2013-10-17T02:02:37.733 回答