Vn.HashParam = new Class ({ Extends: Vn.Object ,Tag: 'vn-hash-param' ,Parent: 'param' ,Properties: { param: { type: Vn.Param ,set: function (x) { this.link ({_param: x}, {'changed': this._onParamChange}); this._refreshParam (); } ,get: function () { return this._param; } }, key: { type: String ,set: function (x) { this._key = x; this._onHashChange (); } ,get: function () { return this._key; } } } ,lock: false ,value: undefined ,_key: null ,initialize: function (props) { this.parent (props); var listener = Vn.Hash.getListener (); this.link ({_listener: listener}, {'changed': this._onHashChange}); this._onHashChange (); } ,_onHashChange: function () { if (!this._key || !this._listener) return; var newValue = Vn.Hash.get (this._key); if (this.value != newValue) { this.value = newValue; this.signalEmit ('changed'); this._refreshParam (); } } ,_refreshParam: function () { if (this._param && !this.lock) { this.lock = true; this._param.value = this.value; this.lock = false; } } ,_onParamChange: function () { if (this.lock) return; var map = {}; map[this.key] = this._param.value; this.lock = true; Vn.Hash.add (map); this.lock = false; } });