diff --git a/packages/spark/spark.js b/packages/spark/spark.js index 312ac73e66..ad41e97b31 100644 --- a/packages/spark/spark.js +++ b/packages/spark/spark.js @@ -136,6 +136,15 @@ Spark.isolate = function (htmlFunc) { renderer.annotate(ctx.run(htmlFunc), "_isolate", function (range) { ctx.on_invalidate(function () { // XXX update with patching + var frag = Spark.render(function () { + return Spark.isolate(htmlFunc); + }); + var oldContents = range.replace_contents(frag); // (should patch) + range.destroy(); + // (GC oldContents) + + // later: + // GC, rewire, patching, etc. }); }); diff --git a/packages/spark/spark_tests.js b/packages/spark/spark_tests.js index 38ad86b69c..cf6ed33c2c 100644 --- a/packages/spark/spark_tests.js +++ b/packages/spark/spark_tests.js @@ -64,3 +64,25 @@ Tinytest.add("spark - assembly", function (test) { test.isTrue(attrValue.indexOf('abcxyz') >= 0, attrValue); }); + + +Tinytest.add("spark - basic isolate", function (test) { + + var R = ReactiveVar('foo'); + + var div = OnscreenDiv(Spark.render(function() { + return '
' + Spark.isolate(function() { + return '' + R.get() + ''; + }) + '
'; + })); + + test.equal(div.html(), '
foo
'); + R.set('bar'); + test.equal(div.html(), '
foo
'); + Meteor.flush(); + test.equal(div.html(), '
bar
'); + R.set('baz'); + Meteor.flush(); + test.equal(div.html(), '
baz
'); + +}); \ No newline at end of file