StackGenVis: Alignment of Data, Algorithms, and Models for Stacking Ensemble Learning Using Performance Metrics
https://doi.org/10.1109/TVCG.2020.3030352
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
45 lines
1.6 KiB
45 lines
1.6 KiB
import Vue from 'vue';
|
|
import { warn } from './util';
|
|
export function collectDataFromConstructor(vm, Component) {
|
|
// override _init to prevent to init as Vue instance
|
|
const originalInit = Component.prototype._init;
|
|
Component.prototype._init = function () {
|
|
// proxy to actual vm
|
|
const keys = Object.getOwnPropertyNames(vm);
|
|
// 2.2.0 compat (props are no longer exposed as self properties)
|
|
if (vm.$options.props) {
|
|
for (const key in vm.$options.props) {
|
|
if (!vm.hasOwnProperty(key)) {
|
|
keys.push(key);
|
|
}
|
|
}
|
|
}
|
|
keys.forEach(key => {
|
|
if (key.charAt(0) !== '_') {
|
|
Object.defineProperty(this, key, {
|
|
get: () => vm[key],
|
|
set: value => { vm[key] = value; },
|
|
configurable: true
|
|
});
|
|
}
|
|
});
|
|
};
|
|
// should be acquired class property values
|
|
const data = new Component();
|
|
// restore original _init to avoid memory leak (#209)
|
|
Component.prototype._init = originalInit;
|
|
// create plain data object
|
|
const plainData = {};
|
|
Object.keys(data).forEach(key => {
|
|
if (data[key] !== undefined) {
|
|
plainData[key] = data[key];
|
|
}
|
|
});
|
|
if (process.env.NODE_ENV !== 'production') {
|
|
if (!(Component.prototype instanceof Vue) && Object.keys(plainData).length > 0) {
|
|
warn('Component class must inherit Vue or its descendant class ' +
|
|
'when class property is used.');
|
|
}
|
|
}
|
|
return plainData;
|
|
}
|
|
|