【问题标题】:Public variables in jQuery UI widget?jQuery UI 小部件中的公共变量?
【发布时间】:2011-05-10 22:09:06
【问题描述】:

我正在寻找在 jQuery UI 小部件工厂 (jquery.ui.widget.js) 之上构建的 jQuery 插件中存储公共变量的最佳方式。

(function($,undefined) {

$.widget('namespace.name',{

    publicVar: '',

    options: {

    },

    _create: function() {

        console.log(this.publicVar);
    },

    publicMethod: function() {

    },

});

})(jQuery);

该变量需要对插件的每个实例都是唯一的,因此需要在小部件对象$.widget('namespace.name',{}); 内的某处声明。此外,我希望它可以从每个方法(_create、publicMethod)中访问。

所以我尝试的是直接在小部件对象内声明变量“publicVar”以及选项和方法。这似乎可行,但没有办法在小部件之外访问这个变量,或者有吗?

欢迎任何关于如何更好地为 jQuery 小部件定义公共变量的建议。

【问题讨论】:

    标签: jquery jquery-ui variables plugins widget


    【解决方案1】:

    我认为您正在寻找内置于 ui 框架中的 getter/setter 方法。 检查 jQuery UI Developer Guide 的 Setters 和 Getters 部分

    查找关于覆盖 _SetOption 的部分

      _setOption: function(key, value) {
        // handle new settings and update options hash
      }
    

    【讨论】:

    • 您指出的链接很棒。 _setOption 不是用于设置和获取选项吗?我有一些变量我不想写但仍然可读。
    • 您可以为要读取的每个变量创建特定的方法作为访问器,或者您可以覆盖选项函数并使其忽略对受保护变量的集合调用。我很好奇您如此关注限制访问内部状态的方式?我知道这一切都很好,很好的 OO 实践,但这是在客户端运行的 javascript,应该始终被认为是一个非常恶劣的环境,如果有人想弄脏你的内部变量,他们可以而且愿意。
    • 我明白你的意思。我担心的不是有人可以访问该变量,而是 API 可能会使我的插件的用户感到困惑。例如,变量之一是元素的宽度(它被缓存)。当插件可以使用 width() 函数自动检索宽度时,为什么插件的任何用户都想要定义宽度?
    猜你喜欢
    • 2011-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-10
    • 1970-01-01
    相关资源
    最近更新 更多