Skip to content

Commit b394bdf

Browse files
authored
minor test cleanup, makes new Component() not observable (#304)
* minor test cleanup * fixes bug with recording component instantiation
1 parent 3c1dad6 commit b394bdf

File tree

5 files changed

+54
-14
lines changed

5 files changed

+54
-14
lines changed

can-component.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ var DefineMap = require("can-define/map/map");
2929
var canLog = require('can-log');
3030
var canDev = require('can-log/dev/dev');
3131
var assign = require('can-assign');
32+
var ObservationRecorder = require("can-observation-recorder");
3233
require('can-view-model');
3334

3435
// DefineList must be imported so Arrays on the ViewModel
@@ -160,7 +161,7 @@ function makeInsertionTagCallback(tagName, componentTagData, shadowTagData, leak
160161
// function and returning a function that can be used to set up the bindings
161162
function getSetupFunctionForComponentVM(componentInitVM) {
162163
// componentInitVM is the viewModel in `new ComponentConstructor({ viewModel: {...} })`
163-
return function(el, makeViewModel, initialVMData) {
164+
return ObservationRecorder.ignore(function(el, makeViewModel, initialVMData) {
164165
var onCompleteBindings = [];
165166
var onTeardowns = [];
166167
var viewModel;// This will be created after getting all the initial values
@@ -233,7 +234,7 @@ function getSetupFunctionForComponentVM(componentInitVM) {
233234
onTeardown();
234235
});
235236
};
236-
};
237+
});
237238
}
238239

239240
var Component = Construct.extend(

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
"can-log": "^1.0.0",
5252
"can-namespace": "1.0.0",
5353
"can-observation": "^4.0.0",
54+
"can-observation-recorder": "^1.2.0",
5455
"can-queues": "^1.0.0",
5556
"can-reflect": "^1.6.0",
5657
"can-simple-map": "^4.1.0",

test/component-instantiation-test.js

Lines changed: 45 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -273,13 +273,12 @@ QUnit.test("Component binding instantiation works as documented", function() {
273273

274274
// Create a new instance of our component
275275
var componentInstance = new NameComponent({
276-
viewModel: {
277-
givenName: value.from(appVM, "family.first"),
278-
familyName: value.bind(appVM, "family.last"),
279-
fullName: value.to(appVM, "family.full")
280-
}
276+
viewModel: {
277+
givenName: value.from(appVM, "family.first"),
278+
familyName: value.bind(appVM, "family.last"),
279+
fullName: value.to(appVM, "family.full")
280+
}
281281
});
282-
var element = componentInstance.element;
283282
var viewModel = componentInstance.viewModel;
284283

285284
// Initial component values are correct
@@ -293,3 +292,43 @@ QUnit.test("Component binding instantiation works as documented", function() {
293292
QUnit.equal(family.get("first"), "Milo", "map “from” prop is correct");
294293
QUnit.equal(family.get("full"), "Milo Flanders", "map “to” prop is correct");
295294
});
295+
296+
QUnit.test("component instantiation is not observable", function(){
297+
298+
var innerViewModel;
299+
var InnerComponent = Component.extend({
300+
tag: "inner-component-to-make",
301+
view: "{{this.innerValue}}",
302+
ViewModel: {
303+
init: function(){
304+
innerViewModel = this;
305+
},
306+
innerValue: "any"
307+
}
308+
});
309+
310+
var count = 0;
311+
312+
Component.extend({
313+
tag: "outer-component-creator",
314+
view: "{{{ this.innerComponent }}}",
315+
ViewModel: {
316+
get innerComponent() {
317+
count++;
318+
return new InnerComponent({
319+
viewModel: {
320+
innerValue: value.bind(this, "outerValue")
321+
}
322+
});
323+
},
324+
outerValue: "any"
325+
}
326+
});
327+
328+
var view = stache("<outer-component-creator/>");
329+
frag = view();
330+
331+
innerViewModel.innerValue = "SOME-VALUE";
332+
333+
QUnit.equal(count, 1, "only updated once");
334+
});

test/component-view-test.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,8 @@ helpers.makeTests("can-component views", function(doc, runTestInOnlyDocument){
7171
leakScope: true,
7272
view: stache("{{greeting}} <content>World</content>{{../exclamation}}"),
7373
viewModel: function(){
74-
return new SimpleMap({greeting: "Hello"});
75-
}
74+
return new SimpleMap({greeting: "Hello"});
75+
}
7676
});
7777

7878
var renderer = stache("<hello-world>{{greeting}}</hello-world>");

test/example-test.js

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ helpers.makeTests("can-component examples", function(doc) {
7373

7474
test("treecombo", function() {
7575

76-
var TreeComboViewModel = DefineMap.extend({
76+
var TreeComboViewModel = DefineMap.extend("TreeComboViewModel",{
7777
items: {
7878
Default: DefineList
7979
},
@@ -150,8 +150,8 @@ helpers.makeTests("can-component examples", function(doc) {
150150
});
151151

152152
var renderer = stache("<treecombo items:bind='locations' title:from='\"Locations\"'></treecombo>");
153-
154-
var base = new DefineMap({});
153+
var BaseViewModel = DefineMap.extend("BaseViewModel",{seal: false},{});
154+
var base = new BaseViewModel({});
155155

156156
var frag = renderer(base);
157157
var root = doc.createElement("div");
@@ -222,7 +222,6 @@ helpers.makeTests("can-component examples", function(doc) {
222222
stop();
223223

224224
setTimeout(function() {
225-
226225
base.set('locations', items);
227226

228227
var itemsList = base.get('locations');

0 commit comments

Comments
 (0)