forked from verdnatura/hedera-web
106 lines
1.8 KiB
JavaScript
106 lines
1.8 KiB
JavaScript
|
|
var Form = require('./form');
|
|
|
|
module.exports = new Class({
|
|
Extends: Vn.Param
|
|
,Tag: 'db-param'
|
|
,Parent: 'form'
|
|
,Properties:
|
|
{
|
|
/**
|
|
* The form field referenced by this param.
|
|
*/
|
|
column:
|
|
{
|
|
type: String
|
|
,set: function(x) {
|
|
this._columnName = x;
|
|
this.refresh();
|
|
}
|
|
,get: function() {
|
|
this._columnName;
|
|
}
|
|
},
|
|
/**
|
|
* The form referenced by this param.
|
|
*/
|
|
form:
|
|
{
|
|
type: Form
|
|
,set: function(x) {
|
|
this.link({_form: x},
|
|
{
|
|
'status-changed': this.onFormChange
|
|
,'iter-changed': this.onIterChange
|
|
});
|
|
|
|
this.refresh();
|
|
}
|
|
,get: function() {
|
|
return this._form;
|
|
}
|
|
},
|
|
/**
|
|
* Determines whether the link to the form is unidirectional, ie, a
|
|
* change in the form updates the parameter but not vice versa.
|
|
*/
|
|
oneWay:
|
|
{
|
|
type: Boolean
|
|
,set: function(x) {
|
|
this._oneWay = x;
|
|
}
|
|
,get: function() {
|
|
return this._oneWay;
|
|
}
|
|
}
|
|
}
|
|
|
|
,_columnName: null
|
|
,_form: null
|
|
,_formLock: false
|
|
,_columnIndex: -1
|
|
,_oneWay: false
|
|
,_formValue: null
|
|
|
|
,initialize: function(props) {
|
|
this.parent(props);
|
|
this.on('changed', this.onChange, this);
|
|
}
|
|
|
|
,refresh: function() {
|
|
if (this._form) {
|
|
this.onFormChange();
|
|
this.onIterChange();
|
|
}
|
|
}
|
|
|
|
,onFormChange: function() {
|
|
if (this._columnName != null)
|
|
this._columnIndex = this._form.getColumnIndex(this._columnName);
|
|
}
|
|
|
|
,onIterChange: function() {
|
|
if (this._oneWay && this.value != null)
|
|
return;
|
|
|
|
this._formLock = true;
|
|
|
|
var formValue;
|
|
|
|
if (this._columnIndex !== -1)
|
|
formValue = this._form.getByIndex(this._columnIndex);
|
|
else
|
|
formValue = undefined;
|
|
|
|
this.value = formValue;
|
|
this._formLock = false;
|
|
}
|
|
|
|
,onChange: function() {
|
|
if (!this._formLock && this._columnIndex != -1 && !this.oneWay)
|
|
this._form.setByIndex(this._columnIndex, this._value);
|
|
}
|
|
});
|
|
|