Как вызвать определенную функцию внутри объекта? - PullRequest
0 голосов
/ 04 сентября 2018

Это часть моего javascript, взятого из плагина jquery. Этот плагин позволил мне создать div-виджеты с загруженным удаленным html-содержимым и заголовком инструментов с кнопкой обновления, чтобы перезагрузить удаленный контент. Мне нужно вызвать функцию _loadAjaxFile для перезагрузки содержимого из других функций вне этого плагина (например, кнопки), но я не могу понять, возможно ли это и как.

(function ($, window, document, undefined) {

    function Plugin(element, options) {
        this.obj = $(element);
        this.o = $.extend({}, $.fn[pluginName].defaults, options);
        this.objId = this.obj.attr('id');
        this.pwCtrls = '.jarviswidget-ctrls';
        this.widget = this.obj.find(this.o.widgets);
        this.toggleClass = this.o.toggleClass.split('|');
        this.editClass = this.o.editClass.split('|');
        this.fullscreenClass = this.o.fullscreenClass.split('|');
        this.customClass = this.o.customClass.split('|');
        this.storage = {enabled: this.o.localStorage};
        this.initialized = false;

        this.init();
    }

    Plugin.prototype = {

    _loadAjaxFile: function (awidget, file, loader) {

            var self = this;

            awidget.find('.widget-body')
                .load(file, function (response, status, xhr) {

                    var $this = $(this);

                    if (status == "error") {
                        $this.html('<h4 class="alert alert-danger">' + self.o.labelError + '<b> ' +
                            xhr.status + " " + xhr.statusText + '</b></h4>');
                    }

                    if (status == "success") {

                        var aPalceholder = awidget.find(self.o.timestampPlaceholder);

                        if (aPalceholder.length) {

                            aPalceholder.html(self._getPastTimestamp(new Date()));
                        }

                        if (typeof self.o.afterLoad == 'function') {
                            self.o.afterLoad.call(this, awidget);
                        }
                    }

                    self = null;
                });
            this._runLoaderWidget(loader);

        },

    }

})(jQuery, window, document);

Это полный код плагина

введите описание ссылки здесь

1 Ответ

0 голосов
/ 04 сентября 2018

На _ указан автор, который говорит вам не звонить напрямую. Это не значит, что вы не можете , но вы не должны. Вы будете использовать внутренние устройства, которые не предназначены для непосредственного использования.

Полагаю, то, что вы указали, является неполным, но тот факт, что эта функция включена Plugin.prototype, означает, что вы сможете вызывать ее для плагина instance . То, как вы получаете экземпляр плагина для его вызова (и можете ли вы), зависит от плагина (см. Его документацию); вполне возможно, что он никогда не предоставит экземпляр непосредственно вашему коду, а просто сделает его доступным через имя, которое он добавляет к jQuery.fn.

...