Skip to content

Commit 82be435

Browse files
tjyrkinencrissdev
authored andcommitted
Fix: pure computeds are treated the same as deferred, not auto-evaluated after mapping.
Closes #9
1 parent 3eafef1 commit 82be435

File tree

2 files changed

+28
-3
lines changed

2 files changed

+28
-3
lines changed

knockout.mapping.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -277,6 +277,7 @@
277277
}
278278

279279
var realDeferEvaluation = options.deferEvaluation;
280+
var realIsPure = options.pure;
280281

281282
var isRemoved = false;
282283

@@ -310,7 +311,7 @@
310311
options.deferEvaluation = true; // will either set for just options, or both read/options.
311312
var realDependentObservable = realKoDependentObservable(read, owner, options);
312313

313-
if (!realDeferEvaluation) {
314+
if (!realDeferEvaluation && !realIsPure) {
314315
realDependentObservable = wrap(realDependentObservable);
315316
dependentObservables.push(realDependentObservable);
316317
}

spec/proxyDependentObservableBehaviors.js

+26-2
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,8 @@
4242
if (createOptions.useReadCallback) {
4343
mapped.DO = createComputed({
4444
read: doData,
45-
deferEvaluation: !!createOptions.deferEvaluation
45+
deferEvaluation: !!createOptions.deferEvaluation,
46+
pure: !!createOptions.pure
4647
}, mapped);
4748
}
4849
else if (createOptions.useWriteCallback) {
@@ -57,7 +58,8 @@
5758
}
5859
else {
5960
mapped.DO = createComputed(doData, mapped, {
60-
deferEvaluation: !!createOptions.deferEvaluation
61+
deferEvaluation: !!createOptions.deferEvaluation,
62+
pure: !!createOptions.pure
6163
});
6264
}
6365

@@ -271,6 +273,17 @@
271273
}, 0);
272274
});
273275

276+
QUnit.test('pure dependentObservables should NOT be auto-evaluated after mapping', function(assert) {
277+
var done = assert.async();
278+
assert.expect(1);
279+
280+
var mapped = testInfo.create({pure: true});
281+
window.setTimeout(function() {
282+
assert.equal(testInfo.evaluationCount, 0);
283+
done();
284+
}, 0);
285+
});
286+
274287
QUnit.test('un-deferred dependentObservables with read callback that are NOT used immediately SHOULD be auto-evaluated after mapping', function(assert) {
275288
var done = assert.async();
276289
assert.expect(1);
@@ -305,6 +318,17 @@
305318
}, 0);
306319
});
307320

321+
QUnit.test('pure dependentObservables with read callback should NOT be auto-evaluated after mapping', function(assert) {
322+
var done = assert.async();
323+
assert.expect(1);
324+
325+
var mapped = testInfo.create({pure: true, useReadCallback: true});
326+
window.setTimeout(function() {
327+
assert.equal(testInfo.evaluationCount, 0);
328+
done();
329+
}, 0);
330+
});
331+
308332
QUnit.test('can subscribe to proxy dependentObservable', function(assert) {
309333
assert.expect(0);
310334
var mapped = testInfo.create({deferEvaluation: true, useReadCallback: true});

0 commit comments

Comments
 (0)