Как расширить плагины jQuery? - PullRequest
5 голосов
/ 19 мая 2011

Я хочу создать плагин jQuery для переноса компонента диаграммы. Он будет иметь такие функции, как addLineSerie или addBarsSerie. Затем я хочу создать другие плагины, расширяющие этот плагин, чтобы добавить новые функциональные возможности или перезаписать то, что необходимо, но при этом иметь возможность вызывать оригинальные функции плагинов.

Я начал с подхода ниже. Это вроде работает, но, как я понял позже, я не могу назвать оригинальную «родительскую» реализацию (если я создаю экземпляр myB, я не могу вызвать myA.goA2).

(function($){
    $.fn.myA = function(settings) {
        this.goA = function() {alert("goA: "+settings);};
        this.goA2 = function() {alert("goA2: "+settings);};
        return this;
    };
})(jQuery);

(function($){
    $.fn.myB = function(settings) {
        this.myA(settings);
        this.goA2 = function() {alert("goA2B: "+settings);};
        this.goB = function() {alert("goB: "+settings);};
        return this;
    };
})(jQuery);

Итак, у меня есть 2 вопроса:

  1. Правильный ли это подход или я должен делать это по-другому?
  2. Как сделать так, чтобы "parent" и "child" были одним и тем же экземпляром, но при этом вызывали реализацию "parent"?

Спасибо.

1 Ответ

1 голос
/ 19 мая 2011

Это кажется правильным, но для выполнения кросс-плагинного поведения вы не можете просто сделать это:

(function($) {
    $.fn.myA = function(settings) {
        this.goA = function() {
            alert("goA: " + settings);
        };
        this.goA2 = function() {
            alert("goA2: " + settings);
        };
        return this;
    };
})(jQuery);

(function($) {
    $.fn.myB = function(settings) {
        this.myA = $.fn.myA(settings);
        this.goA2fromA = function() {
            this.myA.goA2();
        };
        this.goA2 = function() {
            alert("goA2B: " + settings);
        };
        this.goB = function() {
            alert("goB: " + settings);
        };
        return this;
    };
})(jQuery);

$(document).ready(function() {
    var a = $('#one').myA({});
    var b = $('#one').myB({});
    a.goA2();
    b.goA2fromA();
});

РЕДАКТИРОВАТЬ: исправил вызов myA и добавил вызов, который будет сделан. Проверьте рабочую скрипку:

http://jsfiddle.net/PqQgs/4/

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