2015-11-03 61 views
0

我写的这个插件表现不好。第二个例子是破坏第一个实例中设置的选项。我错过了什么来完成分离,以便可以将两个副本加载到同一页面中,并使用不同的参数?jQuery插件没有分离实例

;(function($){ 
    var self; 
    var console = window.console; 
    var alert = window.alert; 

    var TimeSpinner = function(elem, opt) { 
     self = this; 
     self.elem = elem; 
     self.hour = '00'; 
     self.quarter = '00'; 
     self.meridian = 'am'; 
     return self.init(opt); 
    }; 

    TimeSpinner.prototype = { 

     init: function(opt) { 

     } 
    }; 


    $.fn.timeSpinner = function(options) { 
    if(this.length) { 
     return this.each(function() { 
      if (undefined == $(this).data('timeSpinner')) { 
       var rev = new TimeSpinner(this, options); 
       $(this).data('timeSpinner', rev); 
      } 
     }); 
     } 
    }; 
}(jQuery)); 

jQuery().ready(function($){ 
    window.startSpinner = $('#start-spinner').timeSpinner({time: '06:30' }); 
    window.endSpinner = $('#end-spinner').timeSpinner({time: '12:30' }); 
}); 

任何洞见赞赏。

回答

1

的问题是,你在一个共享范围已经delcared的self变量,所以每一个构造函数被调用时它将覆盖self

var TimeSpinner = function(elem, opt) { 
    var self = this; 
    self.elem = elem; 
    self.hour = '00'; 
    self.quarter = '00'; 
    self.meridian = 'am'; 
    return self.init(opt); 
    }; 
+0

我应该如何在实例上存储实例数据? 'this.data.hour ='00';'离开其他实例吗? – RSAdmin

+0

@RSAdmin yes .... –

0

var TimeSpinner = function(elem, opt) { this.elem = elem; this.hour = '00'; this.quarter = '00'; this.meridian = 'am'; return this.init(opt); };

所有TimeSpinner情况下,该值将使用相同的变量“self”;

为什么在这里使用“自我”?