hedera-web/js/db/calc.js

155 lines
2.5 KiB
JavaScript

var Model = require ('./model');
var SimpleIterator = require ('./simple-iterator');
/**
* Interface for handle foreach operations on the model.
**/
module.exports = new Class
({
Extends: Vn.Param
,Tag: 'db-calc'
,Properties:
{
model:
{
type: Model
,set: function (x)
{
this.link ({_model: x},
{
'status-changed': this.onModelChange
,'row-deleted-before': this.onRowDeleteBefore
,'row-updated': this.onRowUpdate
,'row-updated-before': this.onRowUpdateBefore
,'row-inserted': this.onRowInsert
});
var set = new SimpleIterator ({model: x});
this.link ({_set: set});
}
,get: function ()
{
return this._model;
}
},
columnIndex:
{
type: Number
,set: function (x)
{
this.reset ();
this._columnIndex = x;
this.onModelChange ();
}
,get: function ()
{
return this._columnIndex;
}
},
columnName:
{
type: String
,set: function (x)
{
this.reset ();
this._columnName = x;
this.onModelChange ();
}
,get: function ()
{
return this._columnName;
}
},
func:
{
type: Function
,set: function (x)
{
this.reset ();
this._func = x;
this.onModelChange ();
}
,get: function ()
{
return this._func;
}
}
}
,_model: null
,reset: function ()
{
delete this._columnIndex;
delete this._columnName;
delete this._func;
}
,onModelChange: function ()
{
this.init ();
if (this._model)
{
if (this._model.ready && this._columnName)
this._columnIndex = this._model.getColumnIndex (this._columnName);
var rows = this._model.numRows;
for (var i = 0; i < rows; i++)
this.after (i);
}
this.done ();
}
,onRowInsert: function (model, row)
{
this.after (row);
this.done ();
}
,onRowUpdateBefore: function (model, row)
{
this.before (row);
}
,onRowUpdate: function (model, row)
{
this.after (row);
this.done ();
}
,onRowDeleteBefore: function (model, row)
{
this.before (row);
this.done ();
}
/**
* Called before each update or delete row operation.
* You don't need to define it if model isn't updatable.
*
* @param {integer} row The row number
**/
,before: function (row) {}
/**
* Called after each update or insert row operation.
*
* @param {integer} row The row number
**/
,after: function (row) {}
/**
* Called before each model refresh.
**/
,init: function () {}
/**
* Called when an operation in the model is complete.
**/
,done: function () {}
});