【问题标题】:jQuery UI Widget Factory private propertiesjQuery UI Widget Factory 私有属性
【发布时间】:2014-04-20 08:58:56
【问题描述】:

我正在开发一个 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 对于每个变量都是不同的。现在有人如何将“私有”属性设为私有?

谢谢

【问题讨论】:

    标签: jquery jquery-ui widget factory protected


    【解决方案1】:

    我发现了问题。似乎不应该像这样在插件根目录中定义属性:

    ;(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;
    ....
    

    【讨论】:

    • 奇怪的是,文档中似乎没有提到这一点。
    • 这是有道理的,因为$.widget( "namespace.mywidgetname", ..) 变成了一个类。如果我们定义一个新属性 - 它对所有实例都可用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多