ember-source 1.9.0.beta.1.1 → 1.9.0.beta.3

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of ember-source might be problematic. Click here for more details.

checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1d636219e21cb8c79fd5655c4b83d81b3da5d637
4
- data.tar.gz: 4ec3cda21dabf89bd2b5d37046cf6870fd61054a
3
+ metadata.gz: 3b5bdf7f697b229ccfc473515d48c1e117cd5ba4
4
+ data.tar.gz: 9d459b5467cb8c23c8491811ddd3b475220116f0
5
5
  SHA512:
6
- metadata.gz: 02ba9e0975a753613ab24d1d5478b86896aeb7c6ebd84645a77b6c537af6bd2bdd2eb53f7b050da32bcf229a0352ce5ceac9a8c04fa691406a3b4eed97678b58
7
- data.tar.gz: 1f4d0848038ad79e8f2e299ccc93c9ad944622d0efbc5a6de5f5c15c175484e874e324e94f3ade372d309dd9255cebcd9a96b11f4738b76c9470c37adfa4a6fe
6
+ metadata.gz: 18658ffa6334570fab616173a87f719b697c886782dd1709923a42224ad5a5f53a2a9acc3b1cb47b346ca98ebcb2588303935bb574f1235b69ca86630511d542
7
+ data.tar.gz: c0d01faf1cd115c9c9185766104dd3b7cd46655a7177f04eb5422305564e432cfc3ef6620383b43c7febc7e8d1e91024924bab68eea9fea60b9e04030b47de00
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.9.0-beta.1.1
1
+ 1.9.0-beta.3
@@ -5,7 +5,7 @@
5
5
  * Portions Copyright 2008-2011 Apple Inc. All rights reserved.
6
6
  * @license Licensed under MIT license
7
7
  * See https://raw.github.com/emberjs/ember.js/master/LICENSE
8
- * @version 1.9.0-beta.1
8
+ * @version 1.9.0-beta.3
9
9
  */
10
10
 
11
11
  (function() {
@@ -193,6 +193,23 @@ define("backburner",
193
193
  }
194
194
  },
195
195
 
196
+ join: function(target, method /*, args */) {
197
+ if (this.currentInstance) {
198
+ if (!method) {
199
+ method = target;
200
+ target = null;
201
+ }
202
+
203
+ if (isString(method)) {
204
+ method = target[method];
205
+ }
206
+
207
+ return method.apply(target, slice.call(arguments, 2));
208
+ } else {
209
+ return this.run.apply(this, arguments);
210
+ }
211
+ },
212
+
196
213
  defer: function(queueName, target, method /* , args */) {
197
214
  if (!method) {
198
215
  method = target;
@@ -1178,20 +1195,6 @@ define("container/container",
1178
1195
  return container;
1179
1196
  },
1180
1197
 
1181
- /**
1182
- Sets a key-value pair on the current container. If a parent container,
1183
- has the same key, once set on a child, the parent and child will diverge
1184
- as expected.
1185
-
1186
- @method set
1187
- @param {Object} object
1188
- @param {String} key
1189
- @param {any} value
1190
- */
1191
- set: function(object, key, value) {
1192
- object[key] = value;
1193
- },
1194
-
1195
1198
  /**
1196
1199
  Registers a factory for later injection.
1197
1200
 
@@ -1447,11 +1450,13 @@ define("container/container",
1447
1450
 
1448
1451
  /**
1449
1452
  @method options
1450
- @param {String} type
1453
+ @param {String} fullName
1451
1454
  @param {Object} options
1452
1455
  */
1453
- options: function(type, options) {
1454
- this.optionsForType(type, options);
1456
+ options: function(fullName, options) {
1457
+ options = options || {};
1458
+ var normalizedName = this.normalize(fullName);
1459
+ this._options[normalizedName] = options;
1455
1460
  },
1456
1461
 
1457
1462
  /**
@@ -2668,7 +2673,9 @@ define("ember-metal/binding",
2668
2673
  addObserver(obj, fromPath, this, this.fromDidChange);
2669
2674
 
2670
2675
  // if the binding is a two-way binding, also set up an observer on the target
2671
- if (!this._oneWay) { addObserver(obj, toPath, this, this.toDidChange); }
2676
+ if (!this._oneWay) {
2677
+ addObserver(obj, toPath, this, this.toDidChange);
2678
+ }
2672
2679
 
2673
2680
  this._readyToSync = true;
2674
2681
 
@@ -2693,7 +2700,9 @@ define("ember-metal/binding",
2693
2700
  removeObserver(obj, this._from, this, this.fromDidChange);
2694
2701
 
2695
2702
  // if the binding is two-way, remove the observer from the target as well
2696
- if (twoWay) { removeObserver(obj, this._to, this, this.toDidChange); }
2703
+ if (twoWay) {
2704
+ removeObserver(obj, this._to, this, this.toDidChange);
2705
+ }
2697
2706
 
2698
2707
  this._readyToSync = false; // disable scheduled syncs...
2699
2708
  return this;
@@ -3079,7 +3088,9 @@ define("ember-metal/chains",
3079
3088
  var queue = pendingQueue;
3080
3089
  pendingQueue = [];
3081
3090
 
3082
- forEach.call(queue, function(q) { q[0].add(q[1]); });
3091
+ forEach.call(queue, function(q) {
3092
+ q[0].add(q[1]);
3093
+ });
3083
3094
 
3084
3095
  warn('Watching an undefined global, Ember expects watched globals to be' +
3085
3096
  ' setup by the time the run loop is flushed, check for typos', pendingQueue.length === 0);
@@ -3095,7 +3106,9 @@ define("ember-metal/chains",
3095
3106
  nodes = m.chainWatchers = {};
3096
3107
  }
3097
3108
 
3098
- if (!nodes[keyName]) { nodes[keyName] = []; }
3109
+ if (!nodes[keyName]) {
3110
+ nodes[keyName] = [];
3111
+ }
3099
3112
  nodes[keyName].push(node);
3100
3113
  watchKey(obj, keyName, m);
3101
3114
  }
@@ -3139,7 +3152,9 @@ define("ember-metal/chains",
3139
3152
  this._paths = {};
3140
3153
  if (this._watching) {
3141
3154
  this._object = parent.value();
3142
- if (this._object) { addChainWatcher(this._object, this._key, this); }
3155
+ if (this._object) {
3156
+ addChainWatcher(this._object, this._key, this);
3157
+ }
3143
3158
  }
3144
3159
 
3145
3160
  // Special-case: the EachProxy relies on immediate evaluation to
@@ -3159,9 +3174,13 @@ define("ember-metal/chains",
3159
3174
 
3160
3175
  var meta = obj['__ember_meta__'];
3161
3176
  // check if object meant only to be a prototype
3162
- if (meta && meta.proto === obj) return undefined;
3177
+ if (meta && meta.proto === obj) {
3178
+ return undefined;
3179
+ }
3163
3180
 
3164
- if (key === "@each") return get(obj, key);
3181
+ if (key === "@each") {
3182
+ return get(obj, key);
3183
+ }
3165
3184
 
3166
3185
  // if a CP only return cached value
3167
3186
  var desc = meta && meta.descs[key];
@@ -3187,7 +3206,9 @@ define("ember-metal/chains",
3187
3206
  ChainNodePrototype.destroy = function() {
3188
3207
  if (this._watching) {
3189
3208
  var obj = this._object;
3190
- if (obj) { removeChainWatcher(obj, this._key, this); }
3209
+ if (obj) {
3210
+ removeChainWatcher(obj, this._key, this);
3211
+ }
3191
3212
  this._watching = false; // so future calls do nothing
3192
3213
  }
3193
3214
  };
@@ -3199,7 +3220,10 @@ define("ember-metal/chains",
3199
3220
  var path;
3200
3221
 
3201
3222
  for (path in paths) {
3202
- if (paths[path] <= 0) { continue; } // this check will also catch non-number vals.
3223
+ // this check will also catch non-number vals.
3224
+ if (paths[path] <= 0) {
3225
+ continue;
3226
+ }
3203
3227
  ret.add(path);
3204
3228
  }
3205
3229
  return ret;
@@ -3246,7 +3270,9 @@ define("ember-metal/chains",
3246
3270
  var obj, tuple, key, src, paths;
3247
3271
 
3248
3272
  paths = this._paths;
3249
- if (paths[path] > 0) { paths[path]--; }
3273
+ if (paths[path] > 0) {
3274
+ paths[path]--;
3275
+ }
3250
3276
 
3251
3277
  obj = this.value();
3252
3278
  tuple = normalizeTuple(obj, path);
@@ -3269,10 +3295,14 @@ define("ember-metal/chains",
3269
3295
  ChainNodePrototype.chain = function(key, path, src) {
3270
3296
  var chains = this._chains;
3271
3297
  var node;
3272
- if (!chains) { chains = this._chains = {}; }
3298
+ if (!chains) {
3299
+ chains = this._chains = {};
3300
+ }
3273
3301
 
3274
3302
  node = chains[key];
3275
- if (!node) { node = chains[key] = new ChainNode(this, key, src); }
3303
+ if (!node) {
3304
+ node = chains[key] = new ChainNode(this, key, src);
3305
+ }
3276
3306
  node.count++; // count chains...
3277
3307
 
3278
3308
  // chain rest of path if there is one
@@ -3288,10 +3318,10 @@ define("ember-metal/chains",
3288
3318
  var node = chains[key];
3289
3319
 
3290
3320
  // unchain rest of path first...
3291
- if (path && path.length>1) {
3292
- key = firstKey(path);
3293
- path = path.slice(key.length+1);
3294
- node.unchain(key, path);
3321
+ if (path && path.length > 1) {
3322
+ var nextKey = firstKey(path);
3323
+ var nextPath = path.slice(nextKey.length + 1);
3324
+ node.unchain(nextKey, nextPath);
3295
3325
  }
3296
3326
 
3297
3327
  // delete node if needed.
@@ -3307,16 +3337,22 @@ define("ember-metal/chains",
3307
3337
  var chains = this._chains;
3308
3338
  if (chains) {
3309
3339
  for(var key in chains) {
3310
- if (!chains.hasOwnProperty(key)) { continue; }
3340
+ if (!chains.hasOwnProperty(key)) {
3341
+ continue;
3342
+ }
3311
3343
  chains[key].willChange(events);
3312
3344
  }
3313
3345
  }
3314
3346
 
3315
- if (this._parent) { this._parent.chainWillChange(this, this._key, 1, events); }
3347
+ if (this._parent) {
3348
+ this._parent.chainWillChange(this, this._key, 1, events);
3349
+ }
3316
3350
  };
3317
3351
 
3318
3352
  ChainNodePrototype.chainWillChange = function(chain, path, depth, events) {
3319
- if (this._key) { path = this._key + '.' + path; }
3353
+ if (this._key) {
3354
+ path = this._key + '.' + path;
3355
+ }
3320
3356
 
3321
3357
  if (this._parent) {
3322
3358
  this._parent.chainWillChange(this, path, depth+1, events);
@@ -3332,7 +3368,10 @@ define("ember-metal/chains",
3332
3368
  };
3333
3369
 
3334
3370
  ChainNodePrototype.chainDidChange = function(chain, path, depth, events) {
3335
- if (this._key) { path = this._key + '.' + path; }
3371
+ if (this._key) {
3372
+ path = this._key + '.' + path;
3373
+ }
3374
+
3336
3375
  if (this._parent) {
3337
3376
  this._parent.chainDidChange(this, path, depth+1, events);
3338
3377
  } else {
@@ -3359,8 +3398,9 @@ define("ember-metal/chains",
3359
3398
 
3360
3399
  // Special-case: the EachProxy relies on immediate evaluation to
3361
3400
  // establish its observers.
3362
- if (this._parent && this._parent._key === '@each')
3401
+ if (this._parent && this._parent._key === '@each') {
3363
3402
  this.value();
3403
+ }
3364
3404
  }
3365
3405
 
3366
3406
  // then notify chains...
@@ -3373,22 +3413,30 @@ define("ember-metal/chains",
3373
3413
  }
3374
3414
 
3375
3415
  // if no events are passed in then we only care about the above wiring update
3376
- if (events === null) { return; }
3416
+ if (events === null) {
3417
+ return;
3418
+ }
3377
3419
 
3378
3420
  // and finally tell parent about my path changing...
3379
- if (this._parent) { this._parent.chainDidChange(this, this._key, 1, events); }
3421
+ if (this._parent) {
3422
+ this._parent.chainDidChange(this, this._key, 1, events);
3423
+ }
3380
3424
  };
3381
3425
 
3382
3426
  function finishChains(obj) {
3383
3427
  // We only create meta if we really have to
3384
- var m = obj['__ember_meta__'],
3385
- chains, chainWatchers, chainNodes;
3428
+ var m = obj['__ember_meta__'];
3429
+ var chains, chainWatchers, chainNodes;
3430
+
3386
3431
  if (m) {
3387
3432
  // finish any current chains node watchers that reference obj
3388
3433
  chainWatchers = m.chainWatchers;
3389
3434
  if (chainWatchers) {
3390
3435
  for(var key in chainWatchers) {
3391
- if (!chainWatchers.hasOwnProperty(key)) { continue; }
3436
+ if (!chainWatchers.hasOwnProperty(key)) {
3437
+ continue;
3438
+ }
3439
+
3392
3440
  chainNodes = chainWatchers[key];
3393
3441
  if (chainNodes) {
3394
3442
  for (var i=0,l=chainNodes.length;i<l;i++) {
@@ -3441,18 +3489,18 @@ define("ember-metal/computed",
3441
3489
  //
3442
3490
 
3443
3491
  /**
3444
- A computed property transforms an objects function into a property.
3492
+ A computed property transforms an object's function into a property.
3445
3493
 
3446
3494
  By default the function backing the computed property will only be called
3447
3495
  once and the result will be cached. You can specify various properties
3448
- that your computed property is dependent on. This will force the cached
3496
+ that your computed property depends on. This will force the cached
3449
3497
  result to be recomputed if the dependencies are modified.
3450
3498
 
3451
3499
  In the following example we declare a computed property (by calling
3452
- `.property()` on the fullName function) and setup the properties
3500
+ `.property()` on the fullName function) and setup the property
3453
3501
  dependencies (depending on firstName and lastName). The fullName function
3454
3502
  will be called once (regardless of how many times it is accessed) as long
3455
- as it's dependencies have not been changed. Once firstName or lastName are updated
3503
+ as its dependencies have not changed. Once firstName or lastName are updated
3456
3504
  any future calls (or anything bound) to fullName will incorporate the new
3457
3505
  values.
3458
3506
 
@@ -3748,7 +3796,9 @@ define("ember-metal/computed",
3748
3796
  }
3749
3797
 
3750
3798
  chainNodes = meta.chainWatchers && meta.chainWatchers[keyName];
3751
- if (chainNodes) { finishChains(chainNodes); }
3799
+ if (chainNodes) {
3800
+ finishChains(chainNodes);
3801
+ }
3752
3802
  addDependentKeys(this, obj, keyName, meta);
3753
3803
  } else {
3754
3804
  ret = this.func.call(obj, keyName);
@@ -3990,7 +4040,9 @@ define("ember-metal/computed",
3990
4040
  var cache = meta && meta.cache;
3991
4041
  var ret = cache && cache[key];
3992
4042
 
3993
- if (ret === UNDEFINED) { return undefined; }
4043
+ if (ret === UNDEFINED) {
4044
+ return undefined;
4045
+ }
3994
4046
  return ret;
3995
4047
  }
3996
4048
 
@@ -4004,7 +4056,9 @@ define("ember-metal/computed",
4004
4056
 
4005
4057
  cacheFor.get = function(cache, key) {
4006
4058
  var ret = cache[key];
4007
- if (ret === UNDEFINED) { return undefined; }
4059
+ if (ret === UNDEFINED) {
4060
+ return undefined;
4061
+ }
4008
4062
  return ret;
4009
4063
  };
4010
4064
 
@@ -4749,7 +4803,7 @@ define("ember-metal/core",
4749
4803
 
4750
4804
  @class Ember
4751
4805
  @static
4752
- @version 1.9.0-beta.1
4806
+ @version 1.9.0-beta.3
4753
4807
  */
4754
4808
 
4755
4809
  if ('undefined' === typeof Ember) {
@@ -4776,10 +4830,10 @@ define("ember-metal/core",
4776
4830
  /**
4777
4831
  @property VERSION
4778
4832
  @type String
4779
- @default '1.9.0-beta.1'
4833
+ @default '1.9.0-beta.3'
4780
4834
  @static
4781
4835
  */
4782
- Ember.VERSION = '1.9.0-beta.1';
4836
+ Ember.VERSION = '1.9.0-beta.3';
4783
4837
 
4784
4838
  /**
4785
4839
  Standard environmental variables. You can define these in a global `EmberENV`
@@ -4894,7 +4948,7 @@ define("ember-metal/core",
4894
4948
  Ember.LOG_STACKTRACE_ON_DEPRECATION = (Ember.ENV.LOG_STACKTRACE_ON_DEPRECATION !== false);
4895
4949
 
4896
4950
  /**
4897
- Determines whether Ember should add ECMAScript 5 shims to older browsers.
4951
+ Determines whether Ember should add ECMAScript 5 Array shims to older browsers.
4898
4952
 
4899
4953
  @property SHIM_ES5
4900
4954
  @type Boolean
@@ -6427,7 +6481,8 @@ define("ember-metal/keys",
6427
6481
  throw new TypeError('Object.keys called on non-object');
6428
6482
  }
6429
6483
 
6430
- var result = [], prop, i;
6484
+ var result = [];
6485
+ var prop, i;
6431
6486
 
6432
6487
  for (prop in obj) {
6433
6488
  if (prop !== '_super' &&
@@ -6517,8 +6572,12 @@ define("ember-metal/logger",
6517
6572
  var method = typeof consoleObj === 'object' ? consoleObj[name] : null;
6518
6573
 
6519
6574
  if (method) {
6520
- // Older IE doesn't support apply, but Chrome needs it
6521
- if (typeof method.apply === 'function') {
6575
+ // Older IE doesn't support bind, but Chrome needs it
6576
+ if (typeof method.bind === 'function') {
6577
+ logToConsole = method.bind(consoleObj);
6578
+ logToConsole.displayName = 'console.' + name;
6579
+ return logToConsole;
6580
+ } else if (typeof method.apply === 'function') {
6522
6581
  logToConsole = function() {
6523
6582
  method.apply(consoleObj, arguments);
6524
6583
  };
@@ -7211,7 +7270,6 @@ define("ember-metal/mixin",
7211
7270
  var Ember = __dependency1__["default"];
7212
7271
  // warn, assert, wrap, et;
7213
7272
  var merge = __dependency2__["default"];
7214
- var a_map = __dependency3__.map;
7215
7273
  var a_indexOf = __dependency3__.indexOf;
7216
7274
  var a_forEach = __dependency3__.forEach;
7217
7275
  var o_create = __dependency4__.create;
@@ -7266,22 +7324,6 @@ define("ember-metal/mixin",
7266
7324
  return ret;
7267
7325
  }
7268
7326
 
7269
- function initMixin(mixin, args) {
7270
- if (args && args.length > 0) {
7271
- mixin.mixins = a_map.call(args, function(x) {
7272
- if (x instanceof Mixin) { return x; }
7273
-
7274
- // Note: Manually setup a primitive mixin here. This is the only
7275
- // way to actually get a primitive mixin. This way normal creation
7276
- // of mixins will give you combined mixins...
7277
- var mixin = new Mixin();
7278
- mixin.properties = x;
7279
- return mixin;
7280
- });
7281
- }
7282
- return mixin;
7283
- }
7284
-
7285
7327
  function isMethod(obj) {
7286
7328
  return 'function' === typeof obj &&
7287
7329
  obj.isMethod !== false &&
@@ -7728,12 +7770,29 @@ define("ember-metal/mixin",
7728
7770
  @namespace Ember
7729
7771
  */
7730
7772
  __exports__["default"] = Mixin;
7731
- function Mixin() { return initMixin(this, arguments); }
7732
- Mixin.prototype = {
7733
- properties: null,
7734
- mixins: null,
7735
- ownerConstructor: null
7736
- };
7773
+ function Mixin(args, properties) {
7774
+ this.properties = properties;
7775
+
7776
+ var length = args && args.length;
7777
+
7778
+ if (length > 0) {
7779
+ var m = new Array(length);
7780
+
7781
+ for (var i = 0; i < length; i++) {
7782
+ var x = args[i];
7783
+ if (x instanceof Mixin) {
7784
+ m[i] = x;
7785
+ } else {
7786
+ m[i] = new Mixin(undefined, x);
7787
+ }
7788
+ }
7789
+
7790
+ this.mixins = m;
7791
+ } else {
7792
+ this.mixins = undefined;
7793
+ }
7794
+ this.ownerConstructor = undefined;
7795
+ }
7737
7796
 
7738
7797
  Mixin._apply = applyMixin;
7739
7798
 
@@ -7756,7 +7815,12 @@ define("ember-metal/mixin",
7756
7815
  // ES6TODO: this relies on a global state?
7757
7816
  Ember.anyUnprocessedMixins = true;
7758
7817
  var M = this;
7759
- return initMixin(new M(), arguments);
7818
+ var length = arguments.length;
7819
+ var args = new Array(length);
7820
+ for (var i = 0; i < length; i++) {
7821
+ args[i] = arguments[i];
7822
+ }
7823
+ return new M(args, undefined);
7760
7824
  };
7761
7825
 
7762
7826
  var MixinPrototype = Mixin.prototype;
@@ -7766,12 +7830,11 @@ define("ember-metal/mixin",
7766
7830
  @param arguments*
7767
7831
  */
7768
7832
  MixinPrototype.reopen = function() {
7769
- var mixin, tmp;
7833
+ var mixin;
7770
7834
 
7771
7835
  if (this.properties) {
7772
- mixin = Mixin.create();
7773
- mixin.properties = this.properties;
7774
- delete this.properties;
7836
+ mixin = new Mixin(undefined, this.properties);
7837
+ this.properties = undefined;
7775
7838
  this.mixins = [mixin];
7776
7839
  } else if (!this.mixins) {
7777
7840
  this.mixins = [];
@@ -7790,9 +7853,7 @@ define("ember-metal/mixin",
7790
7853
  if (mixin instanceof Mixin) {
7791
7854
  mixins.push(mixin);
7792
7855
  } else {
7793
- tmp = Mixin.create();
7794
- tmp.properties = mixin;
7795
- mixins.push(tmp);
7856
+ mixins.push(new Mixin(undefined, mixin));
7796
7857
  }
7797
7858
  }
7798
7859
 
@@ -7844,7 +7905,7 @@ define("ember-metal/mixin",
7844
7905
  };
7845
7906
 
7846
7907
  MixinPrototype.without = function() {
7847
- var ret = new Mixin(this);
7908
+ var ret = new Mixin([this]);
7848
7909
  ret._without = a_slice.call(arguments);
7849
7910
  return ret;
7850
7911
  };
@@ -7869,7 +7930,9 @@ define("ember-metal/mixin",
7869
7930
  var ret = [];
7870
7931
  _keys(keys, this, seen);
7871
7932
  for(var key in keys) {
7872
- if (keys.hasOwnProperty(key)) { ret.push(key); }
7933
+ if (keys.hasOwnProperty(key)) {
7934
+ ret.push(key);
7935
+ }
7873
7936
  }
7874
7937
  return ret;
7875
7938
  };
@@ -8827,9 +8890,18 @@ define("ember-metal/property_events",
8827
8890
  var proto = m && m.proto;
8828
8891
  var desc = m && m.descs[keyName];
8829
8892
 
8830
- if (!watching) { return; }
8831
- if (proto === obj) { return; }
8832
- if (desc && desc.willChange) { desc.willChange(obj, keyName); }
8893
+ if (!watching) {
8894
+ return;
8895
+ }
8896
+
8897
+ if (proto === obj) {
8898
+ return;
8899
+ }
8900
+
8901
+ if (desc && desc.willChange) {
8902
+ desc.willChange(obj, keyName);
8903
+ }
8904
+
8833
8905
  dependentKeysWillChange(obj, keyName, m);
8834
8906
  chainsWillChange(obj, keyName, m);
8835
8907
  notifyBeforeObservers(obj, keyName);
@@ -8856,11 +8928,18 @@ define("ember-metal/property_events",
8856
8928
  var proto = m && m.proto;
8857
8929
  var desc = m && m.descs[keyName];
8858
8930
 
8859
- if (proto === obj) { return; }
8931
+ if (proto === obj) {
8932
+ return;
8933
+ }
8860
8934
 
8861
8935
  // shouldn't this mean that we're watching this key?
8862
- if (desc && desc.didChange) { desc.didChange(obj, keyName); }
8863
- if (!watching && keyName !== 'length') { return; }
8936
+ if (desc && desc.didChange) {
8937
+ desc.didChange(obj, keyName);
8938
+ }
8939
+
8940
+ if (!watching && keyName !== 'length') {
8941
+ return;
8942
+ }
8864
8943
 
8865
8944
  if (m && m.deps && m.deps[keyName]) {
8866
8945
  dependentKeysDidChange(obj, keyName, m);
@@ -8879,9 +8958,16 @@ define("ember-metal/property_events",
8879
8958
  if (meta && meta.deps && (deps = meta.deps[depKey])) {
8880
8959
  var seen = WILL_SEEN;
8881
8960
  var top = !seen;
8882
- if (top) { seen = WILL_SEEN = {}; }
8961
+
8962
+ if (top) {
8963
+ seen = WILL_SEEN = {};
8964
+ }
8965
+
8883
8966
  iterDeps(propertyWillChange, obj, deps, depKey, seen, meta);
8884
- if (top) { WILL_SEEN = null; }
8967
+
8968
+ if (top) {
8969
+ WILL_SEEN = null;
8970
+ }
8885
8971
  }
8886
8972
  }
8887
8973
 
@@ -8893,15 +8979,26 @@ define("ember-metal/property_events",
8893
8979
  if (meta && meta.deps && (deps = meta.deps[depKey])) {
8894
8980
  var seen = DID_SEEN;
8895
8981
  var top = !seen;
8896
- if (top) { seen = DID_SEEN = {}; }
8982
+
8983
+ if (top) {
8984
+ seen = DID_SEEN = {};
8985
+ }
8986
+
8897
8987
  iterDeps(propertyDidChange, obj, deps, depKey, seen, meta);
8898
- if (top) { DID_SEEN = null; }
8988
+
8989
+ if (top) {
8990
+ DID_SEEN = null;
8991
+ }
8899
8992
  }
8900
8993
  }
8901
8994
 
8902
8995
  function keysOf(obj) {
8903
8996
  var keys = [];
8904
- for (var key in obj) keys.push(key);
8997
+
8998
+ for (var key in obj) {
8999
+ keys.push(key);
9000
+ }
9001
+
8905
9002
  return keys;
8906
9003
  }
8907
9004
 
@@ -8909,8 +9006,15 @@ define("ember-metal/property_events",
8909
9006
  var keys, key, i, desc;
8910
9007
  var guid = guidFor(obj);
8911
9008
  var current = seen[guid];
8912
- if (!current) current = seen[guid] = {};
8913
- if (current[depKey]) return;
9009
+
9010
+ if (!current) {
9011
+ current = seen[guid] = {};
9012
+ }
9013
+
9014
+ if (current[depKey]) {
9015
+ return;
9016
+ }
9017
+
8914
9018
  current[depKey] = true;
8915
9019
 
8916
9020
  if (deps) {
@@ -8919,7 +9023,11 @@ define("ember-metal/property_events",
8919
9023
  for (i=0; i<keys.length; i++) {
8920
9024
  key = keys[i];
8921
9025
  desc = descs[key];
8922
- if (desc && desc._suspended === obj) continue;
9026
+
9027
+ if (desc && desc._suspended === obj) {
9028
+ continue;
9029
+ }
9030
+
8923
9031
  method(obj, key);
8924
9032
  }
8925
9033
  }
@@ -9492,14 +9600,8 @@ define("ember-metal/run_loop",
9492
9600
  @return {Object} Return value from invoking the passed function. Please note,
9493
9601
  when called within an existing loop, no return value is possible.
9494
9602
  */
9495
- run.join = function(target, method /* args */) {
9496
- if (!run.currentRunLoop) {
9497
- return Ember.run.apply(Ember, arguments);
9498
- }
9499
-
9500
- var args = slice.call(arguments);
9501
- args.unshift('actions');
9502
- run.schedule.apply(run, args);
9603
+ run.join = function() {
9604
+ return backburner.join.apply(backburner, arguments);
9503
9605
  };
9504
9606
 
9505
9607
  /**
@@ -11306,7 +11408,8 @@ define("ember-metal/watch_key",
11306
11408
 
11307
11409
 
11308
11410
  function unwatchKey(obj, keyName, meta) {
11309
- var m = meta || metaFor(obj), watching = m.watching;
11411
+ var m = meta || metaFor(obj);
11412
+ var watching = m.watching;
11310
11413
 
11311
11414
  if (watching[keyName] === 1) {
11312
11415
  watching[keyName] = 0;
@@ -13723,8 +13826,8 @@ define("ember-runtime/controllers/array_controller",
13723
13826
  Then, create a view that binds to your new controller:
13724
13827
 
13725
13828
  ```handlebars
13726
- {{#each MyApp.listController}}
13727
- {{firstName}} {{lastName}}
13829
+ {{#each person in MyApp.listController}}
13830
+ {{person.firstName}} {{person.lastName}}
13728
13831
  {{/each}}
13729
13832
  ```
13730
13833