从插件中的函数访问jquery-ui插件变量?

时间:2012-05-05 09:35:47

标签: javascript jquery jquery-ui

我有一个标记插件,我正在重新分解。

我不断传递我每次构建的对象,所以,我现在有一个函数,我传递值并返回对象。这很好,除了现在我需要访问插件中的一个变量。

如果您查看底部,您会在_addTag内看到我拨打this.tag的电话,我想在tagArray中存储元素数量,但我要调用this 1}}不会调用小部件。

(function ($) {
    $.widget("ui.tagit", {

        // default options
        options:{},

        //initialization function
        _create:function () {

            var self = this;
            this.tagsArray = [];
            ...

            ...
            this._addTag('label', 'value');

            }

        },


        _addTag:function (label, value) {
            ...

            //THIS IS WHERE THE TAG OBJECT IS CREATED
            var tag = new this.tag(label, (value === undefined ? label : value));
            tag.element = $('<li class="tagit-choice"'
                + (value !== undefined ? ' tagValue="' + value + '"' : '')
                + '>' + label + '<a class="tagit-close">x</a></li>');
            ...
        },

        tag: function (label, value, element) {
            var self = this;
            return {
                label:label,
                value:value,
                element:element,
                index: self.tagsArray.length
            }
        }

    });
})(jQuery);

this的调用是:

$.widget.tag
__proto__: Object
constructor: function (label, value, element) {
__proto__: Object

1 个答案:

答案 0 :(得分:1)

使用JavaScript中的new关键字来调用函数,并将其上下文(this)设置为新创建的对象。

tag函数中的示例中,您期望将this设置为您正在使用的窗口小部件对象,但是它将被设置为新创建的对象,因为使用new关键字。因此,它将在self.tagsArray.length上失败,因为新创建的对象没有tagsArray属性。

有关new关键字的更多信息,我建议您阅读相关的MDN文章 - https://developer.mozilla.org/en/JavaScript/Reference/Operators/new