From ad5df215868108c04f944b9af29263f09e5b6fd2 Mon Sep 17 00:00:00 2001 From: Stefan Penner Date: Tue, 14 Oct 2014 20:27:16 -0400 Subject: [PATCH] =?UTF-8?q?ensure=20we=20don=E2=80=99t=20needlessly=20scan?= =?UTF-8?q?=20the=20concatenated=20properties=20array?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/ember-metal/lib/mixin.js | 6 +++++- .../tests/mixin/concatenatedProperties_test.js | 16 ++++++++++++++++ packages/ember-runtime/lib/system/core_object.js | 4 +++- 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/packages/ember-metal/lib/mixin.js b/packages/ember-metal/lib/mixin.js index 170e7ef8ae8..c925056339d 100644 --- a/packages/ember-metal/lib/mixin.js +++ b/packages/ember-metal/lib/mixin.js @@ -194,7 +194,11 @@ function applyConcatenatedProperties(obj, key, value, values) { if (baseValue) { if ('function' === typeof baseValue.concat) { - return baseValue.concat(value); + if (value === null || value === undefined) { + return baseValue; + } else { + return baseValue.concat(value); + } } else { return makeArray(baseValue).concat(value); } diff --git a/packages/ember-metal/tests/mixin/concatenatedProperties_test.js b/packages/ember-metal/tests/mixin/concatenatedProperties_test.js index f4b87b0801b..e348b83e77f 100644 --- a/packages/ember-metal/tests/mixin/concatenatedProperties_test.js +++ b/packages/ember-metal/tests/mixin/concatenatedProperties_test.js @@ -15,6 +15,22 @@ test('defining concatenated properties should concat future version', function() deepEqual(Ember.get(obj, 'foo'), ['a', 'b', 'c', 'd', 'e', 'f']); }); +test('defining concatenated properties should concat future version', function() { + + var MixinA = Ember.Mixin.create({ + concatenatedProperties: null, + }); + + var MixinB = Ember.Mixin.create({ + concatenatedProperties: null, + }); + + var obj = Ember.mixin({}, MixinA, MixinB); + + deepEqual(obj.concatenatedProperties, []); +}); + + test('concatenatedProperties should be concatenated', function() { var MixinA = Ember.Mixin.create({ diff --git a/packages/ember-runtime/lib/system/core_object.js b/packages/ember-runtime/lib/system/core_object.js index c565317359a..319502f36c6 100644 --- a/packages/ember-runtime/lib/system/core_object.js +++ b/packages/ember-runtime/lib/system/core_object.js @@ -132,7 +132,9 @@ function makeCtor() { "time, when Ember.ActionHandler is used (i.e. views, " + "controllers & routes).", !((keyName === 'actions') && ActionHandler.detect(this))); - if (concatenatedProperties && indexOf(concatenatedProperties, keyName) >= 0) { + if (concatenatedProperties && + concatenatedProperties.length > 0 && + indexOf(concatenatedProperties, keyName) >= 0) { var baseValue = this[keyName]; if (baseValue) {