jQuery UI小部件工厂私有属性

3
我正在开发一个jQuery UI小部件,但是遇到了一些问题。这是我如何实例化插件的代码。
$('#myId0, #myId1').mywidgetname();

这是我的插件代码:

;(function ( $, window, document, undefined ) {
  $.widget( "namespace.mywidgetname" , {
    _create: function(){
      debugger;
      this._myPrivateProperty = 2;
....

问题在于当调试器第二次停止时,this._myPrivateProperty已经被实例化为值2。我以为小部件会被实例化两次,但事实并非如此。

另外,如果我为每个元素指定不同的选项,像这样:

$('#myId0').mywidgetname({myVarA: 'someText'});
$('#myId1').mywidgetname({myVarB: 'someText'});

每个变量的 this.options 都是不同的。有没有人知道如何使“私有”属性私有?

谢谢。

1个回答

5

我已经找到问题所在。看起来你不应该像这样在插件根目录中定义属性:

;(function ( $, window, document, undefined ) {
  $.widget( "namespace.mywidgetname" , {
    myPrivateVar = {},
    _create: function(){

      this.myPrivateVar.test = 2;
....

这将为所有实例保留引用。但是,您应该在_create方法内部声明变量。
;(function ( $, window, document, undefined ) {
  $.widget( "namespace.mywidgetname" , {
    _create: function(){
      this.myPrivateVar = {};
      this.myPrivateVar.test = 2;
....

奇怪的是,文档中似乎没有提到这一点。 - Antti29
这是有道理的,因为$.widget( "namespace.mywidgetname", ..)变成了一个类。如果我们定义了一个新属性,它将对所有实例都可用。 - sad comrade

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接