0
1
Fork 0
hedera-web-mindshore/js/vn/lot.js

70 lines
1.3 KiB
JavaScript

var VnObject = require('./object');
var LotIface = require('./lot-iface');
var Value = require('./value');
module.exports = new Class({
Extends: VnObject
,Implements: LotIface
,Tag: 'vn-lot'
,Properties: {
$: {
type: Object
,set: function(x) {
this.setAll(x);
}
,get: function() {
return this._params;
}
}
,params: {
type: Object
,set: function(x) {
this.$ = x;
}
,get: function() {
return this.$;
}
}
}
,initialize: function(props) {
this._params = new Proxy({}, {
set(obj, prop, value) {
return Reflect.set(obj, prop, value);
}
});
VnObject.prototype.initialize.call(this, props);
}
,keys: function() {
return Object.keys(this._params);
}
,assign: function(params) {
var diff = Value.partialDiff(this._params, params);
this._assign(diff);
}
,setAll: function(params) {
var diff = Value.diff(this._params, params);
this._assign(diff);
}
,_assign: function(diff) {
if (diff) {
Object.assign(this._params, diff);
this._paramsChanged(diff);
this.changed(diff);
}
}
/**
* Called when lot params changes, can be implemented by child classes to be
* notified about changes.
*
* @param {Object} diff Changed parameters and its new values
*/
,_paramsChanged: function() {}
});