Browse Source

Improved `addType` in Components module

pull/2031/head
Artur Arseniev 7 years ago
parent
commit
f7ac2c7b72
  1. 24
      src/dom_components/index.js

24
src/dom_components/index.js

@ -528,7 +528,9 @@ module.exports = () => {
view = {},
isComponent,
extend,
extendView
extendView,
extendFn = [],
extendFnView = []
} = methods;
const compType = this.getType(type);
const extendType = this.getType(extend);
@ -543,11 +545,26 @@ module.exports = () => {
? extendViewType.view
: typeToExtend.view;
// Function for extending source object methods
const getExtendedObj = (fns, target, srcToExt) =>
fns.reduce((res, next) => {
const fn = target[next];
const parentFn = srcToExt.prototype[next];
if (fn && parentFn) {
res[next] = function(...args) {
parentFn.bind(this)(...args);
fn.bind(this)(...args);
};
}
return res;
}, {});
// If the model/view is a simple object I need to extend it
if (typeof model === 'object') {
methods.model = modelToExt.extend(
{
...model,
...getExtendedObj(extendFn, model, modelToExt),
defaults: {
...modelToExt.prototype.defaults,
...(result(model, 'defaults') || {})
@ -563,7 +580,10 @@ module.exports = () => {
}
if (typeof view === 'object') {
methods.view = viewToExt.extend({ ...view });
methods.view = viewToExt.extend({
...view,
...getExtendedObj(extendFnView, view, viewToExt)
});
}
if (compType) {

Loading…
Cancel
Save