使用jQuery UI小部件工厂创建实例变量的正确方法
我正在使用jQueryUI小部件工厂使用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:
$.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!