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; } } } ,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 (); } });