Наследование модуля dojo при создании экземпляра в другом классе

Учитывая следующее:

Родитель имеет ParentsModule:

define([ParentsModule,...], 
function(ParentsModule,...) {
    return declare("Parent", ..., {

        someFunction: function(arg) {
            var a = new ParentsModule();
            a.doThis(arg);
        },
        ...
    )};
});     

Ребенок расширяет Родителя. Имеет ChildsModule

define([ChildsModule,Parent,...],
function(ChildsModule,Parent,... ) {
    return declare("Child", [Parent], {

        someFunction: function(arg) {
            this.inherited(arguments);
        },
        ...
    )};
});

ParentsModule делает свое дело.

define([ParentsModule,...],
function(ParentsModule,... ) {
    return declare("ChildsModule", [ParentsModule], {
        doThis: function(arg) {
            //bunch of stuff happens here.
        },
    ...
    )};
});

ChildsModule расширяет ParentsModule.

define([...],
function(...) {
    return declare("ParentsModule",..., {
        doThis: function(arg) {
            return;
        },
    ...
    )};
});

Без редактирования "Родитель" можно a.doThis(arg); вызов ChildsModule.doThis() вместо?

Могу ли я переопределить модуль, который создается в функции родителя?

В Parent.someFunction есть много кода, который я хотел бы использовать. Parent (и ParentsModule) - это класс, предоставленный мне, и я являюсь автором Child (и ChildsModule).

1 ответ

Как насчет переопределения загрузки ParentsModule и загрузки ChildsModule? Конечно, это относится ко всему коду, который пытается создать экземпляр ParentsModule - не уверен, является ли это проблемой или нет.

var dojoConfig = { paths: { 'orig_code/ParentsModule': 'new_code/ChildsModule' } };

Если вы не знакомы с dojoConfig; он должен быть размещен где-то перед загрузкой dojo. Если он у вас уже есть, просто добавьте к нему объект paths.

Другие вопросы по тегам