Доступ к данным плагина jQuery - PullRequest
6 голосов
/ 04 августа 2011

В документации jQuery предлагается хранить дополнительную информацию для каждого элемента DOME с использованием data () .Но мне трудно получить доступ к сохраненным данным хорошим способом.

Область действия изменяется, когда я вызываю другие функции, что заставляет меня заблудиться:)

(function ($) {
    var methods = {
        init: function (options) {
            return this.each(function () {
                var $this = $(this),
                    data = $this.data('myPlugin');

                if (!data) {
                    $(this).data('myPlugin', {
                        testValue: true
                    });

                    data = $this.data('myPlugin');
                }
            });
        },

        testFunction: function () {
            console.log('t: '+$(this).data('myPlugin').testValue);
            methods.otherFunction();
        },

        otherFunction: function () {
            console.log('o: '+$(this).data('myPlugin').testValue);
        }
    };

    $.fn.myPlugin = function (method) {
        if (methods[method]) {
            return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
        } else if (typeof method === 'object' || !method) {
            return methods.init.apply(this, arguments);
        } else {
            $.error('Method ' + method + ' does not exist on jQuery.myPlugin');
        }
    };

})(jQuery);

$(document).ready(function () {
    $('body').myPlugin();
    $('body').myPlugin('testFunction');
});

Вывод на консоль:

t: true
Uncaught TypeError: Cannot read property 'testValue' of undefined

1 Ответ

6 голосов
/ 04 августа 2011

Вам нужно использовать

        methods.otherFunction.apply(this);

вместо

        methods.otherFunction();

, чтобы сделать прицелы правильными.

Демонстрация: http://jsfiddle.net/ayNUD/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...