From 83a48e7bcb05ed9f179159f540b181db4dcf6e9c Mon Sep 17 00:00:00 2001 From: Noah Sloan Date: Tue, 2 Oct 2012 10:38:00 -0500 Subject: [PATCH] fix computes that use other computes --- observe/compute/compute.js | 3 +++ observe/compute/compute_test.js | 45 +++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+) diff --git a/observe/compute/compute.js b/observe/compute/compute.js index 2eee35bb5fe..17243c0700f 100644 --- a/observe/compute/compute.js +++ b/observe/compute/compute.js @@ -266,6 +266,9 @@ steal('can/util', function(can) { if(value === undefined){ // we are reading if(computedData){ + if(bindings && can.Observe.__reading) { + can.Observe.__reading(computed,'change'); + } return computedData.value; } else { return getterSetter.call(context || this) diff --git a/observe/compute/compute_test.js b/observe/compute/compute_test.js index d7eda128e91..d9e06c71f19 100644 --- a/observe/compute/compute_test.js +++ b/observe/compute/compute_test.js @@ -71,3 +71,48 @@ test("setter compute", function(){ computed(75); }) + +test("compute a compute", function() { + var project = new can.Observe({ + progress: 0.5 + }); + + var percent = can.compute(function(val){ + if(val) { + project.attr('progress', val / 100); + } else { + return parseInt( project.attr('progress') * 100, 10); + } + }); + + equals(percent(),50,'percent starts right'); + percent.bind('change',function() { + // noop + }); + + var fraction = can.compute(function(val) { + if(val) { + percent(parseInt(val.split('/')[0],10)); + } else { + return percent() + '/100'; + } + }); + + fraction.bind('change',function() { + // noop + }); + + equals(fraction(),'50/100','fraction starts right'); + + percent(25); + + equals(percent(),25); + equals(project.attr('progress'),0.25,'progress updated'); + equals(fraction(),'25/100','fraction updated'); + + fraction('15/100'); + + equals(fraction(),'15/100'); + equals(project.attr('progress'),0.15,'progress updated'); + equals(percent(),15,'% updated'); +});