Здравствуйте.
Я создал класс-наследник от JetView и от этого класса наследую все остальные views. Если все классы в одном модуле, то все отлично работает. Если же класс-наследник от JetView в отдельном модуле, а наследуемые от него классы в другом, то возникает ошибка. Ошибка возникает в JetApp.prototype.createView, так как не срабатывает проверка ui.prototype instanceof JetBase:
if (typeof ui === "function") {
if (ui.prototype instanceof JetBase) {
// UI class
return new ui(this, name);
}
else {
// UI factory functions
ui = ui();
}
}
Ниже пример:
import { JetView } from 'webix-jet';
export class TestBase5 extends JetView {
constructor(app, name, options) {
super(app, name);
this.options = options;
}
config() {
return this.options;
}
}
import { TestBase5 } from './TestBase5';
export default class Test5 extends TestBase5 {
constructor (app, name) {
super(app, name, {
view: 'label',
label: 'Simple App View 5',
inputWidth: 100,
align: 'left',
});
}
}
import { JetApp } from 'webix-jet/dist';
webix.ready(function () {
if (!webix.env.touch && webix.ui.scrollSize && webix.CustomScroll)
webix.CustomScroll.init();
var app = new JetApp({
id: 'sample-app',
name: 'Пример Web-приложения',
version: '1.0',
start: '/test5',
});
app.attachEvent('app:error:resolve', function (name, err) {
window.console.error(err);
});
app.render();
});
Если перенести класс TestBase5 в отдельный модуль npm и импортировать его так:
import { TestBase5 } from 'base-module';
то пример перестает работать.
Однако, если переопределить JetApp.createView, то все работает:
import { JetApp } from 'webix-jet/dist';
webix.ready(function () {
if (!webix.env.touch && webix.ui.scrollSize && webix.CustomScroll)
webix.CustomScroll.init();
JetApp.prototype.createView = function (ui, name) {
if (name=='test5')
return new ui(this, name);
return JetApp.prototype.createView(ui, name);
};
var app = new JetApp({
id: 'sample-app',
name: 'Пример Web-приложения',
version: '1.0',
start: '/test5',
});
app.attachEvent('app:error:resolve', function (name, err) {
window.console.error(err);
});
app.render();
});
Мне кажется, что в JetApp.prototype.createView нужно как-то по-другому написать проверку:
if (typeof ui === "function") {
if (ui.prototype instanceof JetBase) {
// UI class
return new ui(this, name);
}
else {
// UI factory functions
ui = ui();
}
}