使用jQuery UI Widget Factory创建实例变量的正确方法

时间:2012-12-13 20:13:18

标签: jquery jquery-ui jquery-ui-widget-factory

我正在使用jQuery UI小部件工厂。

$.widget("myPlugin" , {

    options: {
    },

    _create: function() {
    },

    instanceVar: "huzzah!"

});

在测试中,看起来instanceVar实际上是原型的一部分。所以插件的所有实例都是一样的。

我可以通过将instanceVar放入选项来解决这个问题,如下所示:

$.widget("myPlugin" , {

    options: {
        instanceVar: "huzzah!"
    },

    _create: function() {
    },

});

然而这似乎很奇怪,因为instanceVar只是插件使用的内部变量 - 而不是插件的用户应该能够改变的东西。

还有其他(更好)的方法来实现这个目标吗?

感谢您的帮助!

1 个答案:

答案 0 :(得分:13)

您可以在实例本身上存储私人数据,例如,在_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/