Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用jQuery UI小部件工厂创建实例变量的正确方法_Jquery_Jquery Ui_Jquery Ui Widget Factory - Fatal编程技术网

使用jQuery UI小部件工厂创建实例变量的正确方法

使用jQuery UI小部件工厂创建实例变量的正确方法,jquery,jquery-ui,jquery-ui-widget-factory,Jquery,Jquery Ui,Jquery Ui Widget Factory,我正在使用jQueryUI小部件工厂 $.widget("myPlugin" , { options: { }, _create: function() { }, instanceVar: "huzzah!" }); 在测试中,instanceVar似乎实际上是原型的一部分。因此,插件的所有实例都是相同的 我可以通过将instanceVar放入选项来解决此问题,如下所示: $.widget("myPlugin" , { options:

我正在使用jQueryUI小部件工厂

$.widget("myPlugin" , {

    options: {
    },

    _create: function() {
    },

    instanceVar: "huzzah!"

});
在测试中,instanceVar似乎实际上是原型的一部分。因此,插件的所有实例都是相同的

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

$.widget("myPlugin" , {

    options: {
        instanceVar: "huzzah!"
    },

    _create: function() {
    },

});
然而,这似乎有些奇怪,因为instanceVar只是插件使用的一个内部变量——插件的用户不应该改变它

有没有其他(更好的)方法来实现这一点


谢谢你的帮助

您可以在实例本身上存储私有数据,例如,在
\u create
中,您应该能够执行
此操作。instanceVar=“huzzah!”


演示:

您可以在实例本身上存储私有数据,例如,在_create中,您应该能够执行
this.instanceVar=“huzzah!”
您还可以声明私有实例变量,就像使用下划线前缀作为约定的函数一样_instanceVar:未定义,应该注意,使用下划线前缀实际上并不阻止访问此类“私有”成员和方法。您仍然可以通过$('#myElement').data('pluginName')访问它们。添加下划线的作用是通过小部件上调用方法的常规方式忽略该函数:$(“#myElement”).pluginName('somePublicFunction')。一旦您有了对小部件实例的引用,您就可以完全访问所有内容,而不管它是否有前导下划线。还要注意,尽管
option
成员没有下划线,但文档表明可以通过.option()方法访问其内容:
$.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!