jQuery UI Widget Factory私有属性

时间:2014-04-20 08:58:57

标签: jquery jquery-ui widget factory protected

我正在研究jQuery UI Widget,但我遇到了一些问题。这就是我实例化插件的方式。

$('#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 个答案:

答案 0 :(得分: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;
....