12

jQuery UI ウィジェット ファクトリを使用しています。

$.widget("myPlugin" , {

    options: {
    },

    _create: function() {
    },

    instanceVar: "huzzah!"

});

テストでは、instanceVar が実際にプロトタイプの一部であるように見えます。したがって、プラグインのすべてのインスタンスで同じです。

次のように、instanceVar をオプションに入れることでこれを修正できます。

$.widget("myPlugin" , {

    options: {
        instanceVar: "huzzah!"
    },

    _create: function() {
    },

});

ただし、instanceVar はプラグインが使用する単なる内部変数であるため、これは奇妙に思えます。プラグインのユーザーが変更できるものではありません。

これを達成するための別の(より良い)方法はありますか?

ご協力いただきありがとうございます!

4

1 に答える 1

17

インスタンス自体にプライベートデータを保存できます。たとえば、 内に次の_createことができます。this.instanceVar = "huzzah!"

$.widget("ui.myPlugin", {

    options: {
        foo: "foo"
    },

    _create: function() {
        this.instanceVar = "huzzah!"
    },

    _setOption: function() {
        this.instanceVar = "worky!";
    },

    destroy: function() {
        console.log(this.instanceVar);  
    }

});

$(document).myPlugin().myPlugin("option","foo","bar").myPlugin("destroy"); // "worky"

$("body").myPlugin().myPlugin("destroy"); // "huzzah!

デモ: http://jsfiddle.net/PGUqr/

于 2012-12-13T20:26:03.803 に答える