diff --git a/src/dom_components/index.js b/src/dom_components/index.js index 7f0ff50b2..a2bb3bdce 100644 --- a/src/dom_components/index.js +++ b/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) {