Расширение функционального объекта - PullRequest
0 голосов
/ 25 марта 2020

У меня есть DraftForm поведение при обработке объекта для черновой формы, изначально предназначенное для использования на определенной странице панели инструментов: c:

let DraftForm = (formSelector, $parent, url) => {
    let init = () => {
        // initialize form behavior...

        // initialize behavior specific to the page
        if (page == '1') initPageSpecific();
    };
    let initPageSpecific = () => {};

    return {
        load: () => {
            $.ajax(...).done(() => init());
        }
    }
};

Однако теперь я собираюсь использовать это повторно компонент, так что есть определенные кусочки оригинальной функции init, которые больше не относятся к черновому проекту generi c. Например, при отправке или закрытии формы на странице панели инструментов мы обновляем sh список черновиков, показанных пользователю. Тем не менее, теперь это больше не применимо после извлечения общей функциональности. Я ищу подходящие способы извлечения этой функциональности и развертывания c версий компонента с указанием сценариев.

Как расширить DraftForm, чтобы определить новые "подклассы" этого объекта? Например, DashboardDraftForm, где init будет вызывать родительскую функцию, а также поведение c, определяемое страницей. Или также UserDraftForm, где вы находитесь в профиле пользователя и хотите отправить им электронное письмо.

Текущий подход page == '1' - это просто плохой дизайн.

1 Ответ

0 голосов
/ 25 марта 2020

Мне не хватает информации о методах внутри вашего DraftForm fun c

Но внутренние методы могут быть организованы в зависимости от ваших целей (недостающая информация):

let DraftForm = (formSelector, $parent, url) => {
    let init = () => {
        // initialize form behavior...

        // initialize behavior specific to the page
        if (page == '1') initPageSpecific();
    };
    let initPageSpecific = () => { };

    return {
        load: () => {
            // $.ajax(...).done(() => init());
        }
    }
};


var __extends = (this && this.__extends) || (function () {
    var extendStatics = function (d, b) {
        extendStatics = Object.setPrototypeOf ||
            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
        return extendStatics(d, b);
    };
    return function (d, b) {
        extendStatics(d, b);
        function __() { this.constructor = d; }
        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
    };
})();

var DraftFormBase = /** @class */ (function () {

    return DraftForm;
}());



var DashboardDraftForm = /** @class */ (function (_super) {
    __extends(DashboardDraftForm, _super);
    function DashboardDraftForm(props) {
        return _super.call(this, props) || this;
    }
    DashboardDraftForm.prototype.init = function () {
        //do specific stuff
    };
    DashboardDraftForm.prototype.load = function () {
        //do specific stuff
    };
    return DashboardDraftForm;
}(DraftFormBase));

var c = new DashboardDraftForm({});
var data = c.load();


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