UNPKG

mframejs

Version:
72 lines 2.86 kB
Object.defineProperty(exports, "__esModule", { value: true }); var traverseAst_1 = require("../ast/traverseAst"); var createBindingExpression_1 = require("../createBindingExpression"); var exported_1 = require("../../container/exported"); var PropertyObserverHandler = (function () { function PropertyObserverHandler(expression, listener) { this.value = undefined; this.isNew = true; this.expression = expression; this.listener = listener; } PropertyObserverHandler.prototype.bind = function (context) { this.observing = true; this.context = context; createBindingExpression_1.createBindingExpression(this.expression, this.context, this); }; PropertyObserverHandler.prototype.setAst = function (ast) { this.ast = ast; if (!this.curBehavior) { this.connectBehavior(); } }; PropertyObserverHandler.prototype.init = function () { if (this.isNew) { this.isNew = false; var oldValue = this.value; var newValue = traverseAst_1.traverseAST(this.ast, this.context); this.value = newValue; this.listenerCall(newValue, oldValue); this.isNew = false; } }; PropertyObserverHandler.prototype.connectBehavior = function () { var _this = this; var behaviors = traverseAst_1.getBehavior(this.ast); if (behaviors) { behaviors.forEach(function (behavior) { if (behavior.name === 'signal') { var x = exported_1.ContainerBehavior.findBehavior(behavior.name); if (x) { _this.curBehavior = new x(_this, behavior.args); } } }); } }; PropertyObserverHandler.prototype.update = function () { var newValue = traverseAst_1.traverseAST(this.ast, this.context); var oldValue = this.value; this.value = newValue; this.listenerCall(newValue, oldValue); this.bind(this.context); }; PropertyObserverHandler.prototype.listenerCall = function (newValue, oldValue) { if (this.listener) { this.listener.call(newValue, oldValue); } }; PropertyObserverHandler.prototype.unbind = function () { if (this.observing) { createBindingExpression_1.removeBindingExpression(this.expression, this.context, this); } this.listener.caller = null; this.observing = false; this.context = null; this.listener = null; this.value = null; }; return PropertyObserverHandler; }()); exports.PropertyObserverHandler = PropertyObserverHandler; //# sourceMappingURL=propertyObserverHandler.js.map