hedera-web/js/db/form.js

128 lines
1.8 KiB
JavaScript

var Iterator = require ('./iterator');
var Model = require ('./model');
module.exports = new Class
({
Extends: Vn.Object
,Implements: Iterator
,Tag: 'db-form'
,Properties:
{
/**
* The model associated to this form.
*/
model:
{
type: Model
,set: function (x)
{
this.link ({_model: x},
{
'status-changed': this.onModelChange
,'row-updated': this.onRowUpdate
});
}
,get: function ()
{
return this._model;
}
},
/**
* The row where the form positioned, has -1 if the row is unselected.
*/
row:
{
type: Number
,set: function (x)
{
if (!this._model || this._model.numRows <= x || x < -1)
x = -1;
if (x == this._row)
return;
this._row = x;
this.changed ();
}
,get: function ()
{
return this._row;
}
},
/**
* The number of rows in the form.
*/
numRows:
{
type: Number
,get: function ()
{
if (this._model)
return this._model.numRows;
return 0;
}
},
/**
* Checks if the form data is ready.
*/
ready:
{
type: Boolean
,get: function ()
{
return this._ready;
}
},
/**
* The current row parameters.
*/
params:
{
type: Object
,set: function (x)
{
this.assign (x);
}
,get: function ()
{
return this.getParams ();
}
}
}
,lastRow: 0
,_model: null
,_row: -1
,_ready: false
,onModelChange: function ()
{
var ready = this._model && this._model.ready;
if (ready != this._ready)
{
if (this._row != -1)
this.lastRow = this._row;
this._ready = ready;
this.signalEmit ('status-changed');
if (this._row == -1)
this.row = this.lastRow;
if (ready)
this.signalEmit ('ready');
this.changed ();
}
}
,onRowUpdate: function (model, row)
{
if (row == this._row)
this.changed ();
}
});