2

どうすればそんなことをするのですか?ウィジェットを完全に無効にする必要があります。つまり、すべてのインスタンスを無効にする必要があり、無効にした後にこれ以上インスタンスを作成できなくなります。検索してみましたが、何も出てきません。

どんな助けにも感謝します。

編集:

より活発な例。

たとえば、ウィジェットの 3 つのインスタンスが 3 つの要素に配置されているとします。次に、ウィジェットをオフにしたいと思います。静的メソッド turnOff を呼び出します。これにより、a) 動作中のすべてのインスタンスが無効になります b) 後で ajax 経由で呼び出された場合に、そのウィジェットの他のインスタンスが作成されるのを禁止します。つまり、再び動作させたいので、a を呼び出しますオンにする()。

私のウィジェットはヒント pugin であるため、ユーザーがヒントをオフにすると、どこでもオフにする必要があり、ページのヒント部分がまだ非同期に読み込まれているアプリ内の場所があります。

それは私がしなければならないことのほとんどです。

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クラスを追加し直して、他のすべてを調整します

グローバル変数をフラグとして使用する限り、turnOn/turnOff 機能をウィジェットに埋め込むことができます。グローバルを保存するための他のオプションについては、この回答を参照してください: JavaScript でグローバル変数を宣言する方法は?

行き詰まった場合は、ウィジェット コードとこれまでに試したことの (簡略化されたバージョン) を投稿できます。誰かがさらに助けてくれる可能性があります。

于 2013-10-17T02:02:37.733 に答える