mframejs
Version:
simple framework
72 lines • 2.86 kB
JavaScript
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