From 19d61f5d20d69b35ff198a0fb6c73f1265901bdc Mon Sep 17 00:00:00 2001 From: sergey-gerasimov Date: Tue, 2 Feb 2016 16:30:58 +0300 Subject: [PATCH] Fixed not recalculating computeds when values were changed --- package.json | 22 +++++++++++----------- src/itDepends.js | 28 ++++++++++++++++++---------- 2 files changed, 29 insertions(+), 21 deletions(-) diff --git a/package.json b/package.json index 0420843..2b3af07 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "it-depends", - "version": "1.0.0", + "version": "1.0.1", "description": "Lightweight dependency tracking library for JavaScript", "main": "itDepends.js", "dependencies": {}, @@ -21,7 +21,7 @@ }, "scripts": { "test": "mocha", - "coverage": "mocha specs/index.js --require blanket -R html-cov > coverage.html" + "coverage": "mocha specs/index.js --require blanket -R html-cov > coverage.html" }, "repository": { "type": "git", @@ -41,13 +41,13 @@ }, "homepage": "https://github.com/gerich-home/itDepends#readme", "config": { - "blanket": { - "pattern": [ - "./out/build/itDepends.js" - ], - "data-cover-never": [ - "node_modules" - ] - } - } + "blanket": { + "pattern": [ + "./out/build/itDepends.js" + ], + "data-cover-never": [ + "node_modules" + ] + } + } } diff --git a/src/itDepends.js b/src/itDepends.js index 6280757..5084d97 100644 --- a/src/itDepends.js +++ b/src/itDepends.js @@ -24,15 +24,16 @@ var trackers = [nop]; var nextId = 0; - function notifyCurrentTracker(tracked) { - trackers[trackers.length - 1](tracked); + function notifyCurrentTracker(tracked, dependencyId) { + trackers[trackers.length - 1](tracked, dependencyId); }; exports.value = function (initialValue) { + var id = ++nextId; var currentValue = initialValue; var getValue = function () { - notifyCurrentTracker(self); + notifyCurrentTracker(self, id); return currentValue; }; @@ -59,6 +60,7 @@ return self; }; + exports.computed = function (calculator) { var id = ++nextId; var currentValue; @@ -72,8 +74,11 @@ }; var atLeastOneDependencyChanged = function (visitor) { - for (var i = 0; i < dependencies.length; i++) { - var dependency = dependencies[i]; + for (var dependencyId in dependencies) { + if (!dependencies.hasOwnProperty(dependencyId)) + continue; + + var dependency = dependencies[dependencyId]; if (dependency.trackedValue.changedSince(dependency.capturedVersion, visitor)) { return true; @@ -92,13 +97,16 @@ var self = function () { if (needRecalc({})) { needRecalcCache = false; - dependencies = []; + dependencies = {}; + + trackers.push(function (trackedValue, dependencyId) { + if (dependencies[dependencyId]) + return; - trackers.push(function (trackedValue) { - dependencies.push({ + dependencies[dependencyId] ={ trackedValue: trackedValue, capturedVersion: trackedValue.valueVersion - }); + }; }); try { @@ -108,7 +116,7 @@ } } - notifyCurrentTracker(self); + notifyCurrentTracker(self, id); return currentValue; };