Db.Form = new Class ({ Extends: Vn.Object ,Implements: Db.Iterator ,Tag: 'db-form' ,Child: 'model' ,Properties: { /** * The model associated to this form. **/ model: { type: Db.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.iterChanged (); } ,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'); } } ,onRowUpdate: function (model, row, column) { if (row == this._row) this.iterChanged (); } });