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.

@@ -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 @@ enifed("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 @@ enifed("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 @@ enifed("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
  /**
@@ -2491,10 +2496,10 @@ enifed("ember-application/system/application",
2491
2496
  names by setting the application's `customEvents` property:
2492
2497
 
2493
2498
  ```javascript
2494
- App = Ember.Application.create({
2499
+ var App = Ember.Application.create({
2495
2500
  customEvents: {
2496
2501
  // add support for the paste event
2497
- paste: "paste"
2502
+ paste: 'paste'
2498
2503
  }
2499
2504
  });
2500
2505
  ```
@@ -2508,7 +2513,7 @@ enifed("ember-application/system/application",
2508
2513
  should be delegated, set your application's `rootElement` property:
2509
2514
 
2510
2515
  ```javascript
2511
- window.App = Ember.Application.create({
2516
+ var App = Ember.Application.create({
2512
2517
  rootElement: '#ember-app'
2513
2518
  });
2514
2519
  ```
@@ -2551,7 +2556,7 @@ enifed("ember-application/system/application",
2551
2556
  the `LOG_TRANSITIONS_INTERNAL` flag:
2552
2557
 
2553
2558
  ```javascript
2554
- window.App = Ember.Application.create({
2559
+ var App = Ember.Application.create({
2555
2560
  LOG_TRANSITIONS: true, // basic logging of successful transitions
2556
2561
  LOG_TRANSITIONS_INTERNAL: true // detailed logging of all routing steps
2557
2562
  });
@@ -2620,10 +2625,10 @@ enifed("ember-application/system/application",
2620
2625
  corresponding view method name as the value. For example:
2621
2626
 
2622
2627
  ```javascript
2623
- App = Ember.Application.create({
2628
+ var App = Ember.Application.create({
2624
2629
  customEvents: {
2625
2630
  // add support for the paste event
2626
- paste: "paste"
2631
+ paste: 'paste'
2627
2632
  }
2628
2633
  });
2629
2634
  ```
@@ -2753,10 +2758,11 @@ enifed("ember-application/system/application",
2753
2758
  Example:
2754
2759
 
2755
2760
  ```javascript
2756
- App = Ember.Application.create();
2761
+ var App = Ember.Application.create();
2762
+
2757
2763
  App.deferReadiness();
2758
-
2759
- jQuery.getJSON("/auth-token", function(token) {
2764
+ // Ember.$ is a reference to the jQuery object/function
2765
+ Ember.$.getJSON('/auth-token', function(token) {
2760
2766
  App.token = token;
2761
2767
  App.advanceReadiness();
2762
2768
  });
@@ -2802,7 +2808,8 @@ enifed("ember-application/system/application",
2802
2808
 
2803
2809
  ```javascript
2804
2810
  var App = Ember.Application.create();
2805
- App.Orange = Ember.Object.extend();
2811
+
2812
+ App.Orange = Ember.Object.extend();
2806
2813
  App.register('fruit:favorite', App.Orange);
2807
2814
  ```
2808
2815
 
@@ -2813,8 +2820,8 @@ enifed("ember-application/system/application",
2813
2820
  An example of registering a controller with a non-standard name:
2814
2821
 
2815
2822
  ```javascript
2816
- var App = Ember.Application.create(),
2817
- Session = Ember.Controller.extend();
2823
+ var App = Ember.Application.create();
2824
+ var Session = Ember.Controller.extend();
2818
2825
 
2819
2826
  App.register('controller:session', Session);
2820
2827
 
@@ -2839,10 +2846,10 @@ enifed("ember-application/system/application",
2839
2846
  App.Email = Ember.Object.extend();
2840
2847
  App.session = Ember.Object.create();
2841
2848
 
2842
- App.register('model:user', App.Person, {singleton: false });
2849
+ App.register('model:user', App.Person, { singleton: false });
2843
2850
  App.register('fruit:favorite', App.Orange);
2844
- App.register('communication:main', App.Email, {singleton: false});
2845
- App.register('session', App.session, {instantiate: false});
2851
+ App.register('communication:main', App.Email, { singleton: false });
2852
+ App.register('session', App.session, { instantiate: false });
2846
2853
  ```
2847
2854
 
2848
2855
  @method register
@@ -2866,8 +2873,8 @@ enifed("ember-application/system/application",
2866
2873
  An example of providing a session object to all controllers:
2867
2874
 
2868
2875
  ```javascript
2869
- var App = Ember.Application.create(),
2870
- Session = Ember.Object.extend({ isAuthenticated: false });
2876
+ var App = Ember.Application.create();
2877
+ var Session = Ember.Object.extend({ isAuthenticated: false });
2871
2878
 
2872
2879
  // A factory must be registered before it can be injected
2873
2880
  App.register('session:main', Session);
@@ -2894,7 +2901,7 @@ enifed("ember-application/system/application",
2894
2901
  directly (via `create` or `new`) bypasses the dependency injection
2895
2902
  system.
2896
2903
 
2897
- Ember-Data instantiates its models in a unique manner, and consequently
2904
+ **Note:** Ember-Data instantiates its models in a unique manner, and consequently
2898
2905
  injections onto models (or all models) will not work as expected. Injections
2899
2906
  on models can be enabled by setting `Ember.MODEL_FACTORY_INJECTIONS`
2900
2907
  to `true`.
@@ -2966,24 +2973,23 @@ enifed("ember-application/system/application",
2966
2973
  Typical Example:
2967
2974
 
2968
2975
  ```javascript
2969
-
2970
2976
  var App;
2971
2977
 
2972
2978
  run(function() {
2973
2979
  App = Ember.Application.create();
2974
2980
  });
2975
2981
 
2976
- module("acceptance test", {
2982
+ module('acceptance test', {
2977
2983
  setup: function() {
2978
2984
  App.reset();
2979
2985
  }
2980
2986
  });
2981
2987
 
2982
- test("first test", function() {
2988
+ test('first test', function() {
2983
2989
  // App is freshly reset
2984
2990
  });
2985
2991
 
2986
- test("first test", function() {
2992
+ test('second test', function() {
2987
2993
  // App is again freshly reset
2988
2994
  });
2989
2995
  ```
@@ -2995,14 +3001,13 @@ enifed("ember-application/system/application",
2995
3001
  to the app becoming ready.
2996
3002
 
2997
3003
  ```javascript
2998
-
2999
3004
  var App;
3000
3005
 
3001
3006
  run(function() {
3002
3007
  App = Ember.Application.create();
3003
3008
  });
3004
3009
 
3005
- module("acceptance test", {
3010
+ module('acceptance test', {
3006
3011
  setup: function() {
3007
3012
  run(function() {
3008
3013
  App.reset();
@@ -3011,12 +3016,13 @@ enifed("ember-application/system/application",
3011
3016
  }
3012
3017
  });
3013
3018
 
3014
- test("first test", function() {
3019
+ test('first test', function() {
3015
3020
  ok(true, 'something before app is initialized');
3016
3021
 
3017
3022
  run(function() {
3018
3023
  App.advanceReadiness();
3019
3024
  });
3025
+
3020
3026
  ok(true, 'something after app is initialized');
3021
3027
  });
3022
3028
  ```
@@ -3185,8 +3191,9 @@ enifed("ember-application/system/application",
3185
3191
  ```javascript
3186
3192
  Ember.Application.initializer({
3187
3193
  name: 'namedInitializer',
3194
+
3188
3195
  initialize: function(container, application) {
3189
- Ember.debug("Running namedInitializer!");
3196
+ Ember.debug('Running namedInitializer!');
3190
3197
  }
3191
3198
  });
3192
3199
  ```
@@ -3200,8 +3207,9 @@ enifed("ember-application/system/application",
3200
3207
  ```javascript
3201
3208
  Ember.Application.initializer({
3202
3209
  name: 'first',
3210
+
3203
3211
  initialize: function(container, application) {
3204
- Ember.debug("First initializer!");
3212
+ Ember.debug('First initializer!');
3205
3213
  }
3206
3214
  });
3207
3215
 
@@ -3217,7 +3225,7 @@ enifed("ember-application/system/application",
3217
3225
  after: 'first',
3218
3226
 
3219
3227
  initialize: function(container, application) {
3220
- Ember.debug("Second initializer!");
3228
+ Ember.debug('Second initializer!');
3221
3229
  }
3222
3230
  });
3223
3231
 
@@ -3234,7 +3242,7 @@ enifed("ember-application/system/application",
3234
3242
  before: 'first',
3235
3243
 
3236
3244
  initialize: function(container, application) {
3237
- Ember.debug("Pre initializer!");
3245
+ Ember.debug('Pre initializer!');
3238
3246
  }
3239
3247
  });
3240
3248
 
@@ -3252,7 +3260,7 @@ enifed("ember-application/system/application",
3252
3260
  after: ['first', 'second'],
3253
3261
 
3254
3262
  initialize: function(container, application) {
3255
- Ember.debug("Post initializer!");
3263
+ Ember.debug('Post initializer!');
3256
3264
  }
3257
3265
  });
3258
3266
 
@@ -3269,10 +3277,11 @@ enifed("ember-application/system/application",
3269
3277
 
3270
3278
  ```javascript
3271
3279
  Ember.Application.initializer({
3272
- name: "preload-data",
3280
+ name: 'preload-data',
3273
3281
 
3274
3282
  initialize: function(container, application) {
3275
3283
  var store = container.lookup('store:main');
3284
+
3276
3285
  store.pushPayload(preloadedData);
3277
3286
  }
3278
3287
  });
@@ -3306,6 +3315,7 @@ enifed("ember-application/system/application",
3306
3315
 
3307
3316
  Ember.assert("The initializer '" + initializer.name + "' has already been registered", !this.initializers[initializer.name]);
3308
3317
  Ember.assert("An initializer cannot be registered without an initialize function", canInvoke(initializer, 'initialize'));
3318
+ Ember.assert("An initializer cannot be registered without a name property", initializer.name !== undefined);
3309
3319
 
3310
3320
  this.initializers[initializer.name] = initializer;
3311
3321
  },
@@ -6001,24 +6011,24 @@ enifed("ember-handlebars/controls/select",
6001
6011
  return buffer;
6002
6012
  },"3":function(depth0,helpers,partials,data) {
6003
6013
  var stack1;
6004
- stack1 = helpers.each.call(depth0, "view.groupedContent", {"name":"each","hash":{},"hashTypes":{},"hashContexts":{},"fn":this.program(4, data),"inverse":this.noop,"types":["ID"],"contexts":[depth0],"data":data});
6014
+ stack1 = helpers.each.call(depth0, "group", "in", "view.groupedContent", {"name":"each","hash":{},"hashTypes":{},"hashContexts":{},"fn":this.program(4, data),"inverse":this.noop,"types":["ID","ID","ID"],"contexts":[depth0,depth0,depth0],"data":data});
6005
6015
  if (stack1 != null) { data.buffer.push(stack1); }
6006
6016
  else { data.buffer.push(''); }
6007
6017
  },"4":function(depth0,helpers,partials,data) {
6008
6018
  var escapeExpression=this.escapeExpression;
6009
6019
  data.buffer.push(escapeExpression(helpers.view.call(depth0, "view.groupView", {"name":"view","hash":{
6010
- 'label': ("label"),
6011
- 'content': ("content")
6020
+ 'label': ("group.label"),
6021
+ 'content': ("group.content")
6012
6022
  },"hashTypes":{'label': "ID",'content': "ID"},"hashContexts":{'label': depth0,'content': depth0},"types":["ID"],"contexts":[depth0],"data":data})));
6013
6023
  },"6":function(depth0,helpers,partials,data) {
6014
6024
  var stack1;
6015
- stack1 = helpers.each.call(depth0, "view.content", {"name":"each","hash":{},"hashTypes":{},"hashContexts":{},"fn":this.program(7, data),"inverse":this.noop,"types":["ID"],"contexts":[depth0],"data":data});
6025
+ stack1 = helpers.each.call(depth0, "item", "in", "view.content", {"name":"each","hash":{},"hashTypes":{},"hashContexts":{},"fn":this.program(7, data),"inverse":this.noop,"types":["ID","ID","ID"],"contexts":[depth0,depth0,depth0],"data":data});
6016
6026
  if (stack1 != null) { data.buffer.push(stack1); }
6017
6027
  else { data.buffer.push(''); }
6018
6028
  },"7":function(depth0,helpers,partials,data) {
6019
6029
  var escapeExpression=this.escapeExpression;
6020
6030
  data.buffer.push(escapeExpression(helpers.view.call(depth0, "view.optionView", {"name":"view","hash":{
6021
- 'content': ("")
6031
+ 'content': ("item")
6022
6032
  },"hashTypes":{'content': "ID"},"hashContexts":{'content': depth0},"types":["ID"],"contexts":[depth0],"data":data})));
6023
6033
  },"compiler":[6,">= 2.0.0-beta.1"],"main":function(depth0,helpers,partials,data) {
6024
6034
  var stack1, buffer = '';
@@ -6887,7 +6897,7 @@ enifed("ember-handlebars/ext",
6887
6897
  resolveHelper = requireModule('ember-handlebars/helpers/binding')['resolveHelper'];
6888
6898
  } // ES6TODO: stupid circular dep
6889
6899
 
6890
- var error, view = "";
6900
+ var error, fmtError, view = "";
6891
6901
 
6892
6902
  var options = arguments[arguments.length - 1];
6893
6903
 
@@ -6897,11 +6907,19 @@ enifed("ember-handlebars/ext",
6897
6907
  return helper.apply(this, arguments);
6898
6908
  }
6899
6909
 
6900
- error = "%@ Handlebars error: Could not find property '%@' on object %@.";
6901
6910
  if (options.data) {
6902
6911
  view = options.data.view;
6903
6912
  }
6904
- throw new EmberError(fmt(error, [view, options.name, this]));
6913
+
6914
+ if (options.name.match(/-/)) {
6915
+ error = "%@ Handlebars error: Could not find component or helper named '%@'";
6916
+ fmtError = fmt(error, [view, options.name]);
6917
+ } else {
6918
+ error = "%@ Handlebars error: Could not find property '%@' on object %@.";
6919
+ fmtError = fmt(error, [view, options.name, this]);
6920
+ }
6921
+
6922
+ throw new EmberError(fmtError);
6905
6923
  }
6906
6924
 
6907
6925
  __exports__.helperMissingHelper = helperMissingHelper;/**
@@ -8221,22 +8239,12 @@ enifed("ember-handlebars/helpers/each",
8221
8239
  of the base Handlebars `{{#each}}` helper.
8222
8240
 
8223
8241
  The default behavior of `{{#each}}` is to yield its inner block once for every
8224
- item in an array. Each yield will provide the item as the context of the block.
8242
+ item in an array.
8225
8243
 
8226
8244
  ```javascript
8227
8245
  var developers = [{name: 'Yehuda'},{name: 'Tom'}, {name: 'Paul'}];
8228
8246
  ```
8229
8247
 
8230
- ```handlebars
8231
- {{#each developers}}
8232
- {{name}}
8233
- {{! `this` is each developer }}
8234
- {{/each}}
8235
- ```
8236
-
8237
- `{{#each}}` supports an alternative syntax with element naming. This preserves
8238
- context of the yielded block:
8239
-
8240
8248
  ```handlebars
8241
8249
  {{#each person in developers}}
8242
8250
  {{person.name}}
@@ -8252,8 +8260,8 @@ enifed("ember-handlebars/helpers/each",
8252
8260
  ```
8253
8261
 
8254
8262
  ```handlebars
8255
- {{#each developerNames}}
8256
- {{this}}
8263
+ {{#each name in developerNames}}
8264
+ {{name}}
8257
8265
  {{/each}}
8258
8266
  ```
8259
8267
 
@@ -8279,8 +8287,8 @@ enifed("ember-handlebars/helpers/each",
8279
8287
 
8280
8288
  ```handlebars
8281
8289
  <ul>
8282
- {{#each developers itemViewClass="person"}}
8283
- {{name}}
8290
+ {{#each developer in developers itemViewClass="person"}}
8291
+ {{developer.name}}
8284
8292
  {{/each}}
8285
8293
  </ul>
8286
8294
  ```
@@ -8311,13 +8319,13 @@ enifed("ember-handlebars/helpers/each",
8311
8319
  ```javascript
8312
8320
  App.PersonView = Ember.View.extend({
8313
8321
  tagName: 'li',
8314
- template: '{{name}}'
8322
+ template: '{{developer.name}}'
8315
8323
  });
8316
8324
  ```
8317
8325
 
8318
8326
  ```handlebars
8319
8327
  <ul>
8320
- {{each developers itemViewClass="person"}}
8328
+ {{each developer in developers itemViewClass="person"}}
8321
8329
  </ul>
8322
8330
  ```
8323
8331
 
@@ -8335,8 +8343,8 @@ enifed("ember-handlebars/helpers/each",
8335
8343
 
8336
8344
  ```handlebars
8337
8345
  <ul>
8338
- {{#each developers emptyViewClass="no-people"}}
8339
- <li>{{name}}</li>
8346
+ {{#each developer in developers emptyViewClass="no-people"}}
8347
+ <li>{{developer.name}}</li>
8340
8348
  {{/each}}
8341
8349
  </ul>
8342
8350
  ```
@@ -8379,12 +8387,13 @@ enifed("ember-handlebars/helpers/each",
8379
8387
  function eachHelper(path) {
8380
8388
  var options = arguments[arguments.length - 1];
8381
8389
  var helperName = 'each';
8390
+ var keywordName;
8382
8391
 
8383
8392
  if (arguments.length === 4) {
8384
8393
  Ember.assert("If you pass more than one argument to the each helper," +
8385
8394
  " it must be in the form #each foo in bar", arguments[1] === "in");
8386
8395
 
8387
- var keywordName = arguments[0];
8396
+ keywordName = arguments[0];
8388
8397
  path = arguments[2];
8389
8398
 
8390
8399
  helperName += ' ' + keywordName + ' in ' + path;
@@ -8396,6 +8405,8 @@ enifed("ember-handlebars/helpers/each",
8396
8405
  helperName += ' ' + path;
8397
8406
  }
8398
8407
 
8408
+ Ember.deprecate('Using the context switching form of {{each}} is deprecated. Please use the keyword form (`{{#each foo in bar}}`) instead. See http://emberjs.com/guides/deprecations/#toc_more-consistent-handlebars-scope for more details.', keywordName);
8409
+
8399
8410
  options.hash.emptyViewClass = Ember._MetamorphView;
8400
8411
  options.hash.dataSourceBinding = path;
8401
8412
  options.hashTypes.dataSourceBinding = 'STRING';
@@ -8654,16 +8665,6 @@ enifed("ember-handlebars/helpers/partial",
8654
8665
  changes, the partial will be re-rendered using the new template
8655
8666
  name.
8656
8667
 
8657
- ## Setting the partial's context with `with`
8658
-
8659
- The `partial` helper can be used in conjunction with the `with`
8660
- helper to set a context that will be used by the partial:
8661
-
8662
- ```handlebars
8663
- {{#with currentUser}}
8664
- {{partial "user_info"}}
8665
- {{/with}}
8666
- ```
8667
8668
 
8668
8669
  @method partial
8669
8670
  @for Ember.Handlebars.helpers
@@ -9282,40 +9283,9 @@ enifed("ember-handlebars/helpers/with",
9282
9283
  });
9283
9284
 
9284
9285
  /**
9285
- Use the `{{with}}` helper when you want to scope context. Take the following code as an example:
9286
-
9287
- ```handlebars
9288
- <h5>{{user.name}}</h5>
9289
-
9290
- <div class="role">
9291
- <h6>{{user.role.label}}</h6>
9292
- <span class="role-id">{{user.role.id}}</span>
9293
-
9294
- <p class="role-desc">{{user.role.description}}</p>
9295
- </div>
9296
- ```
9297
-
9298
- `{{with}}` can be our best friend in these cases,
9299
- instead of writing `user.role.*` over and over, we use `{{#with user.role}}`.
9300
- Now the context within the `{{#with}} .. {{/with}}` block is `user.role` so you can do the following:
9301
-
9302
- ```handlebars
9303
- <h5>{{user.name}}</h5>
9304
-
9305
- <div class="role">
9306
- {{#with user.role}}
9307
- <h6>{{label}}</h6>
9308
- <span class="role-id">{{id}}</span>
9309
-
9310
- <p class="role-desc">{{description}}</p>
9311
- {{/with}}
9312
- </div>
9313
- ```
9314
-
9315
- ### `as` operator
9316
-
9317
- This operator aliases the scope to a new name. It's helpful for semantic clarity and to retain
9318
- default scope or to reference from another `{{with}}` block.
9286
+ Use the `{{with}}` helper when you want to aliases the to a new name. It's helpful
9287
+ for semantic clarity and to retain default scope or to reference from another
9288
+ `{{with}}` block.
9319
9289
 
9320
9290
  ```handlebars
9321
9291
  // posts might not be
@@ -9339,18 +9309,18 @@ enifed("ember-handlebars/helpers/with",
9339
9309
  ### `controller` option
9340
9310
 
9341
9311
  Adding `controller='something'` instructs the `{{with}}` helper to create and use an instance of
9342
- the specified controller with the new context as its content.
9312
+ the specified controller wrapping the aliased keyword.
9343
9313
 
9344
9314
  This is very similar to using an `itemController` option with the `{{each}}` helper.
9345
9315
 
9346
9316
  ```handlebars
9347
- {{#with users.posts controller='userBlogPosts'}}
9348
- {{!- The current context is wrapped in our controller instance }}
9317
+ {{#with users.posts as posts controller='userBlogPosts'}}
9318
+ {{!- `posts` is wrapped in our controller instance }}
9349
9319
  {{/with}}
9350
9320
  ```
9351
9321
 
9352
- In the above example, the template provided to the `{{with}}` block is now wrapped in the
9353
- `userBlogPost` controller, which provides a very elegant way to decorate the context with custom
9322
+ In the above example, the `posts` keyword is now wrapped in the `userBlogPost` controller,
9323
+ which provides an elegant way to decorate the context with custom
9354
9324
  functions/properties.
9355
9325
 
9356
9326
  @method with
@@ -9389,6 +9359,8 @@ enifed("ember-handlebars/helpers/with",
9389
9359
  options = localizedOptions;
9390
9360
  preserveContext = true;
9391
9361
  } else {
9362
+ Ember.deprecate('Using the context switching form of `{{with}}` is deprecated. Please use the keyword form (`{{with foo as bar}}`) instead. See http://emberjs.com/guides/deprecations/#toc_more-consistent-handlebars-scope for more details.');
9363
+
9392
9364
  Ember.assert("You must pass exactly one argument to the with helper", arguments.length === 2);
9393
9365
  Ember.assert("You must pass a block to the with helper", options.fn && options.fn !== Handlebars.VM.noop);
9394
9366
 
@@ -11016,7 +10988,9 @@ enifed("ember-metal/binding",
11016
10988
  addObserver(obj, fromPath, this, this.fromDidChange);
11017
10989
 
11018
10990
  // if the binding is a two-way binding, also set up an observer on the target
11019
- if (!this._oneWay) { addObserver(obj, toPath, this, this.toDidChange); }
10991
+ if (!this._oneWay) {
10992
+ addObserver(obj, toPath, this, this.toDidChange);
10993
+ }
11020
10994
 
11021
10995
  this._readyToSync = true;
11022
10996
 
@@ -11041,7 +11015,9 @@ enifed("ember-metal/binding",
11041
11015
  removeObserver(obj, this._from, this, this.fromDidChange);
11042
11016
 
11043
11017
  // if the binding is two-way, remove the observer from the target as well
11044
- if (twoWay) { removeObserver(obj, this._to, this, this.toDidChange); }
11018
+ if (twoWay) {
11019
+ removeObserver(obj, this._to, this, this.toDidChange);
11020
+ }
11045
11021
 
11046
11022
  this._readyToSync = false; // disable scheduled syncs...
11047
11023
  return this;
@@ -11427,7 +11403,9 @@ enifed("ember-metal/chains",
11427
11403
  var queue = pendingQueue;
11428
11404
  pendingQueue = [];
11429
11405
 
11430
- forEach.call(queue, function(q) { q[0].add(q[1]); });
11406
+ forEach.call(queue, function(q) {
11407
+ q[0].add(q[1]);
11408
+ });
11431
11409
 
11432
11410
  warn('Watching an undefined global, Ember expects watched globals to be' +
11433
11411
  ' setup by the time the run loop is flushed, check for typos', pendingQueue.length === 0);
@@ -11443,7 +11421,9 @@ enifed("ember-metal/chains",
11443
11421
  nodes = m.chainWatchers = {};
11444
11422
  }
11445
11423
 
11446
- if (!nodes[keyName]) { nodes[keyName] = []; }
11424
+ if (!nodes[keyName]) {
11425
+ nodes[keyName] = [];
11426
+ }
11447
11427
  nodes[keyName].push(node);
11448
11428
  watchKey(obj, keyName, m);
11449
11429
  }
@@ -11487,7 +11467,9 @@ enifed("ember-metal/chains",
11487
11467
  this._paths = {};
11488
11468
  if (this._watching) {
11489
11469
  this._object = parent.value();
11490
- if (this._object) { addChainWatcher(this._object, this._key, this); }
11470
+ if (this._object) {
11471
+ addChainWatcher(this._object, this._key, this);
11472
+ }
11491
11473
  }
11492
11474
 
11493
11475
  // Special-case: the EachProxy relies on immediate evaluation to
@@ -11507,9 +11489,13 @@ enifed("ember-metal/chains",
11507
11489
 
11508
11490
  var meta = obj['__ember_meta__'];
11509
11491
  // check if object meant only to be a prototype
11510
- if (meta && meta.proto === obj) return undefined;
11492
+ if (meta && meta.proto === obj) {
11493
+ return undefined;
11494
+ }
11511
11495
 
11512
- if (key === "@each") return get(obj, key);
11496
+ if (key === "@each") {
11497
+ return get(obj, key);
11498
+ }
11513
11499
 
11514
11500
  // if a CP only return cached value
11515
11501
  var desc = meta && meta.descs[key];
@@ -11535,7 +11521,9 @@ enifed("ember-metal/chains",
11535
11521
  ChainNodePrototype.destroy = function() {
11536
11522
  if (this._watching) {
11537
11523
  var obj = this._object;
11538
- if (obj) { removeChainWatcher(obj, this._key, this); }
11524
+ if (obj) {
11525
+ removeChainWatcher(obj, this._key, this);
11526
+ }
11539
11527
  this._watching = false; // so future calls do nothing
11540
11528
  }
11541
11529
  };
@@ -11547,7 +11535,10 @@ enifed("ember-metal/chains",
11547
11535
  var path;
11548
11536
 
11549
11537
  for (path in paths) {
11550
- if (paths[path] <= 0) { continue; } // this check will also catch non-number vals.
11538
+ // this check will also catch non-number vals.
11539
+ if (paths[path] <= 0) {
11540
+ continue;
11541
+ }
11551
11542
  ret.add(path);
11552
11543
  }
11553
11544
  return ret;
@@ -11594,7 +11585,9 @@ enifed("ember-metal/chains",
11594
11585
  var obj, tuple, key, src, paths;
11595
11586
 
11596
11587
  paths = this._paths;
11597
- if (paths[path] > 0) { paths[path]--; }
11588
+ if (paths[path] > 0) {
11589
+ paths[path]--;
11590
+ }
11598
11591
 
11599
11592
  obj = this.value();
11600
11593
  tuple = normalizeTuple(obj, path);
@@ -11617,10 +11610,14 @@ enifed("ember-metal/chains",
11617
11610
  ChainNodePrototype.chain = function(key, path, src) {
11618
11611
  var chains = this._chains;
11619
11612
  var node;
11620
- if (!chains) { chains = this._chains = {}; }
11613
+ if (!chains) {
11614
+ chains = this._chains = {};
11615
+ }
11621
11616
 
11622
11617
  node = chains[key];
11623
- if (!node) { node = chains[key] = new ChainNode(this, key, src); }
11618
+ if (!node) {
11619
+ node = chains[key] = new ChainNode(this, key, src);
11620
+ }
11624
11621
  node.count++; // count chains...
11625
11622
 
11626
11623
  // chain rest of path if there is one
@@ -11636,10 +11633,10 @@ enifed("ember-metal/chains",
11636
11633
  var node = chains[key];
11637
11634
 
11638
11635
  // unchain rest of path first...
11639
- if (path && path.length>1) {
11640
- key = firstKey(path);
11641
- path = path.slice(key.length+1);
11642
- node.unchain(key, path);
11636
+ if (path && path.length > 1) {
11637
+ var nextKey = firstKey(path);
11638
+ var nextPath = path.slice(nextKey.length + 1);
11639
+ node.unchain(nextKey, nextPath);
11643
11640
  }
11644
11641
 
11645
11642
  // delete node if needed.
@@ -11655,16 +11652,22 @@ enifed("ember-metal/chains",
11655
11652
  var chains = this._chains;
11656
11653
  if (chains) {
11657
11654
  for(var key in chains) {
11658
- if (!chains.hasOwnProperty(key)) { continue; }
11655
+ if (!chains.hasOwnProperty(key)) {
11656
+ continue;
11657
+ }
11659
11658
  chains[key].willChange(events);
11660
11659
  }
11661
11660
  }
11662
11661
 
11663
- if (this._parent) { this._parent.chainWillChange(this, this._key, 1, events); }
11662
+ if (this._parent) {
11663
+ this._parent.chainWillChange(this, this._key, 1, events);
11664
+ }
11664
11665
  };
11665
11666
 
11666
11667
  ChainNodePrototype.chainWillChange = function(chain, path, depth, events) {
11667
- if (this._key) { path = this._key + '.' + path; }
11668
+ if (this._key) {
11669
+ path = this._key + '.' + path;
11670
+ }
11668
11671
 
11669
11672
  if (this._parent) {
11670
11673
  this._parent.chainWillChange(this, path, depth+1, events);
@@ -11680,7 +11683,10 @@ enifed("ember-metal/chains",
11680
11683
  };
11681
11684
 
11682
11685
  ChainNodePrototype.chainDidChange = function(chain, path, depth, events) {
11683
- if (this._key) { path = this._key + '.' + path; }
11686
+ if (this._key) {
11687
+ path = this._key + '.' + path;
11688
+ }
11689
+
11684
11690
  if (this._parent) {
11685
11691
  this._parent.chainDidChange(this, path, depth+1, events);
11686
11692
  } else {
@@ -11707,8 +11713,9 @@ enifed("ember-metal/chains",
11707
11713
 
11708
11714
  // Special-case: the EachProxy relies on immediate evaluation to
11709
11715
  // establish its observers.
11710
- if (this._parent && this._parent._key === '@each')
11716
+ if (this._parent && this._parent._key === '@each') {
11711
11717
  this.value();
11718
+ }
11712
11719
  }
11713
11720
 
11714
11721
  // then notify chains...
@@ -11721,22 +11728,30 @@ enifed("ember-metal/chains",
11721
11728
  }
11722
11729
 
11723
11730
  // if no events are passed in then we only care about the above wiring update
11724
- if (events === null) { return; }
11731
+ if (events === null) {
11732
+ return;
11733
+ }
11725
11734
 
11726
11735
  // and finally tell parent about my path changing...
11727
- if (this._parent) { this._parent.chainDidChange(this, this._key, 1, events); }
11736
+ if (this._parent) {
11737
+ this._parent.chainDidChange(this, this._key, 1, events);
11738
+ }
11728
11739
  };
11729
11740
 
11730
11741
  function finishChains(obj) {
11731
11742
  // We only create meta if we really have to
11732
- var m = obj['__ember_meta__'],
11733
- chains, chainWatchers, chainNodes;
11743
+ var m = obj['__ember_meta__'];
11744
+ var chains, chainWatchers, chainNodes;
11745
+
11734
11746
  if (m) {
11735
11747
  // finish any current chains node watchers that reference obj
11736
11748
  chainWatchers = m.chainWatchers;
11737
11749
  if (chainWatchers) {
11738
11750
  for(var key in chainWatchers) {
11739
- if (!chainWatchers.hasOwnProperty(key)) { continue; }
11751
+ if (!chainWatchers.hasOwnProperty(key)) {
11752
+ continue;
11753
+ }
11754
+
11740
11755
  chainNodes = chainWatchers[key];
11741
11756
  if (chainNodes) {
11742
11757
  for (var i=0,l=chainNodes.length;i<l;i++) {
@@ -11789,18 +11804,18 @@ enifed("ember-metal/computed",
11789
11804
  //
11790
11805
 
11791
11806
  /**
11792
- A computed property transforms an objects function into a property.
11807
+ A computed property transforms an object's function into a property.
11793
11808
 
11794
11809
  By default the function backing the computed property will only be called
11795
11810
  once and the result will be cached. You can specify various properties
11796
- that your computed property is dependent on. This will force the cached
11811
+ that your computed property depends on. This will force the cached
11797
11812
  result to be recomputed if the dependencies are modified.
11798
11813
 
11799
11814
  In the following example we declare a computed property (by calling
11800
- `.property()` on the fullName function) and setup the properties
11815
+ `.property()` on the fullName function) and setup the property
11801
11816
  dependencies (depending on firstName and lastName). The fullName function
11802
11817
  will be called once (regardless of how many times it is accessed) as long
11803
- as it's dependencies have not been changed. Once firstName or lastName are updated
11818
+ as its dependencies have not changed. Once firstName or lastName are updated
11804
11819
  any future calls (or anything bound) to fullName will incorporate the new
11805
11820
  values.
11806
11821
 
@@ -12096,7 +12111,9 @@ enifed("ember-metal/computed",
12096
12111
  }
12097
12112
 
12098
12113
  chainNodes = meta.chainWatchers && meta.chainWatchers[keyName];
12099
- if (chainNodes) { finishChains(chainNodes); }
12114
+ if (chainNodes) {
12115
+ finishChains(chainNodes);
12116
+ }
12100
12117
  addDependentKeys(this, obj, keyName, meta);
12101
12118
  } else {
12102
12119
  ret = this.func.call(obj, keyName);
@@ -12338,7 +12355,9 @@ enifed("ember-metal/computed",
12338
12355
  var cache = meta && meta.cache;
12339
12356
  var ret = cache && cache[key];
12340
12357
 
12341
- if (ret === UNDEFINED) { return undefined; }
12358
+ if (ret === UNDEFINED) {
12359
+ return undefined;
12360
+ }
12342
12361
  return ret;
12343
12362
  }
12344
12363
 
@@ -12352,7 +12371,9 @@ enifed("ember-metal/computed",
12352
12371
 
12353
12372
  cacheFor.get = function(cache, key) {
12354
12373
  var ret = cache[key];
12355
- if (ret === UNDEFINED) { return undefined; }
12374
+ if (ret === UNDEFINED) {
12375
+ return undefined;
12376
+ }
12356
12377
  return ret;
12357
12378
  };
12358
12379
 
@@ -13097,7 +13118,7 @@ enifed("ember-metal/core",
13097
13118
 
13098
13119
  @class Ember
13099
13120
  @static
13100
- @version 1.9.0-beta.1
13121
+ @version 1.9.0-beta.3
13101
13122
  */
13102
13123
 
13103
13124
  if ('undefined' === typeof Ember) {
@@ -13124,10 +13145,10 @@ enifed("ember-metal/core",
13124
13145
  /**
13125
13146
  @property VERSION
13126
13147
  @type String
13127
- @default '1.9.0-beta.1'
13148
+ @default '1.9.0-beta.3'
13128
13149
  @static
13129
13150
  */
13130
- Ember.VERSION = '1.9.0-beta.1';
13151
+ Ember.VERSION = '1.9.0-beta.3';
13131
13152
 
13132
13153
  /**
13133
13154
  Standard environmental variables. You can define these in a global `EmberENV`
@@ -13242,7 +13263,7 @@ enifed("ember-metal/core",
13242
13263
  Ember.LOG_STACKTRACE_ON_DEPRECATION = (Ember.ENV.LOG_STACKTRACE_ON_DEPRECATION !== false);
13243
13264
 
13244
13265
  /**
13245
- Determines whether Ember should add ECMAScript 5 shims to older browsers.
13266
+ Determines whether Ember should add ECMAScript 5 Array shims to older browsers.
13246
13267
 
13247
13268
  @property SHIM_ES5
13248
13269
  @type Boolean
@@ -14775,7 +14796,8 @@ enifed("ember-metal/keys",
14775
14796
  throw new TypeError('Object.keys called on non-object');
14776
14797
  }
14777
14798
 
14778
- var result = [], prop, i;
14799
+ var result = [];
14800
+ var prop, i;
14779
14801
 
14780
14802
  for (prop in obj) {
14781
14803
  if (prop !== '_super' &&
@@ -14865,8 +14887,12 @@ enifed("ember-metal/logger",
14865
14887
  var method = typeof consoleObj === 'object' ? consoleObj[name] : null;
14866
14888
 
14867
14889
  if (method) {
14868
- // Older IE doesn't support apply, but Chrome needs it
14869
- if (typeof method.apply === 'function') {
14890
+ // Older IE doesn't support bind, but Chrome needs it
14891
+ if (typeof method.bind === 'function') {
14892
+ logToConsole = method.bind(consoleObj);
14893
+ logToConsole.displayName = 'console.' + name;
14894
+ return logToConsole;
14895
+ } else if (typeof method.apply === 'function') {
14870
14896
  logToConsole = function() {
14871
14897
  method.apply(consoleObj, arguments);
14872
14898
  };
@@ -15559,7 +15585,6 @@ enifed("ember-metal/mixin",
15559
15585
  var Ember = __dependency1__["default"];
15560
15586
  // warn, assert, wrap, et;
15561
15587
  var merge = __dependency2__["default"];
15562
- var a_map = __dependency3__.map;
15563
15588
  var a_indexOf = __dependency3__.indexOf;
15564
15589
  var a_forEach = __dependency3__.forEach;
15565
15590
  var o_create = __dependency4__.create;
@@ -15614,22 +15639,6 @@ enifed("ember-metal/mixin",
15614
15639
  return ret;
15615
15640
  }
15616
15641
 
15617
- function initMixin(mixin, args) {
15618
- if (args && args.length > 0) {
15619
- mixin.mixins = a_map.call(args, function(x) {
15620
- if (x instanceof Mixin) { return x; }
15621
-
15622
- // Note: Manually setup a primitive mixin here. This is the only
15623
- // way to actually get a primitive mixin. This way normal creation
15624
- // of mixins will give you combined mixins...
15625
- var mixin = new Mixin();
15626
- mixin.properties = x;
15627
- return mixin;
15628
- });
15629
- }
15630
- return mixin;
15631
- }
15632
-
15633
15642
  function isMethod(obj) {
15634
15643
  return 'function' === typeof obj &&
15635
15644
  obj.isMethod !== false &&
@@ -16076,12 +16085,29 @@ enifed("ember-metal/mixin",
16076
16085
  @namespace Ember
16077
16086
  */
16078
16087
  __exports__["default"] = Mixin;
16079
- function Mixin() { return initMixin(this, arguments); }
16080
- Mixin.prototype = {
16081
- properties: null,
16082
- mixins: null,
16083
- ownerConstructor: null
16084
- };
16088
+ function Mixin(args, properties) {
16089
+ this.properties = properties;
16090
+
16091
+ var length = args && args.length;
16092
+
16093
+ if (length > 0) {
16094
+ var m = new Array(length);
16095
+
16096
+ for (var i = 0; i < length; i++) {
16097
+ var x = args[i];
16098
+ if (x instanceof Mixin) {
16099
+ m[i] = x;
16100
+ } else {
16101
+ m[i] = new Mixin(undefined, x);
16102
+ }
16103
+ }
16104
+
16105
+ this.mixins = m;
16106
+ } else {
16107
+ this.mixins = undefined;
16108
+ }
16109
+ this.ownerConstructor = undefined;
16110
+ }
16085
16111
 
16086
16112
  Mixin._apply = applyMixin;
16087
16113
 
@@ -16104,7 +16130,12 @@ enifed("ember-metal/mixin",
16104
16130
  // ES6TODO: this relies on a global state?
16105
16131
  Ember.anyUnprocessedMixins = true;
16106
16132
  var M = this;
16107
- return initMixin(new M(), arguments);
16133
+ var length = arguments.length;
16134
+ var args = new Array(length);
16135
+ for (var i = 0; i < length; i++) {
16136
+ args[i] = arguments[i];
16137
+ }
16138
+ return new M(args, undefined);
16108
16139
  };
16109
16140
 
16110
16141
  var MixinPrototype = Mixin.prototype;
@@ -16114,12 +16145,11 @@ enifed("ember-metal/mixin",
16114
16145
  @param arguments*
16115
16146
  */
16116
16147
  MixinPrototype.reopen = function() {
16117
- var mixin, tmp;
16148
+ var mixin;
16118
16149
 
16119
16150
  if (this.properties) {
16120
- mixin = Mixin.create();
16121
- mixin.properties = this.properties;
16122
- delete this.properties;
16151
+ mixin = new Mixin(undefined, this.properties);
16152
+ this.properties = undefined;
16123
16153
  this.mixins = [mixin];
16124
16154
  } else if (!this.mixins) {
16125
16155
  this.mixins = [];
@@ -16138,9 +16168,7 @@ enifed("ember-metal/mixin",
16138
16168
  if (mixin instanceof Mixin) {
16139
16169
  mixins.push(mixin);
16140
16170
  } else {
16141
- tmp = Mixin.create();
16142
- tmp.properties = mixin;
16143
- mixins.push(tmp);
16171
+ mixins.push(new Mixin(undefined, mixin));
16144
16172
  }
16145
16173
  }
16146
16174
 
@@ -16192,7 +16220,7 @@ enifed("ember-metal/mixin",
16192
16220
  };
16193
16221
 
16194
16222
  MixinPrototype.without = function() {
16195
- var ret = new Mixin(this);
16223
+ var ret = new Mixin([this]);
16196
16224
  ret._without = a_slice.call(arguments);
16197
16225
  return ret;
16198
16226
  };
@@ -16217,7 +16245,9 @@ enifed("ember-metal/mixin",
16217
16245
  var ret = [];
16218
16246
  _keys(keys, this, seen);
16219
16247
  for(var key in keys) {
16220
- if (keys.hasOwnProperty(key)) { ret.push(key); }
16248
+ if (keys.hasOwnProperty(key)) {
16249
+ ret.push(key);
16250
+ }
16221
16251
  }
16222
16252
  return ret;
16223
16253
  };
@@ -17175,9 +17205,18 @@ enifed("ember-metal/property_events",
17175
17205
  var proto = m && m.proto;
17176
17206
  var desc = m && m.descs[keyName];
17177
17207
 
17178
- if (!watching) { return; }
17179
- if (proto === obj) { return; }
17180
- if (desc && desc.willChange) { desc.willChange(obj, keyName); }
17208
+ if (!watching) {
17209
+ return;
17210
+ }
17211
+
17212
+ if (proto === obj) {
17213
+ return;
17214
+ }
17215
+
17216
+ if (desc && desc.willChange) {
17217
+ desc.willChange(obj, keyName);
17218
+ }
17219
+
17181
17220
  dependentKeysWillChange(obj, keyName, m);
17182
17221
  chainsWillChange(obj, keyName, m);
17183
17222
  notifyBeforeObservers(obj, keyName);
@@ -17204,11 +17243,18 @@ enifed("ember-metal/property_events",
17204
17243
  var proto = m && m.proto;
17205
17244
  var desc = m && m.descs[keyName];
17206
17245
 
17207
- if (proto === obj) { return; }
17246
+ if (proto === obj) {
17247
+ return;
17248
+ }
17208
17249
 
17209
17250
  // shouldn't this mean that we're watching this key?
17210
- if (desc && desc.didChange) { desc.didChange(obj, keyName); }
17211
- if (!watching && keyName !== 'length') { return; }
17251
+ if (desc && desc.didChange) {
17252
+ desc.didChange(obj, keyName);
17253
+ }
17254
+
17255
+ if (!watching && keyName !== 'length') {
17256
+ return;
17257
+ }
17212
17258
 
17213
17259
  if (m && m.deps && m.deps[keyName]) {
17214
17260
  dependentKeysDidChange(obj, keyName, m);
@@ -17227,9 +17273,16 @@ enifed("ember-metal/property_events",
17227
17273
  if (meta && meta.deps && (deps = meta.deps[depKey])) {
17228
17274
  var seen = WILL_SEEN;
17229
17275
  var top = !seen;
17230
- if (top) { seen = WILL_SEEN = {}; }
17276
+
17277
+ if (top) {
17278
+ seen = WILL_SEEN = {};
17279
+ }
17280
+
17231
17281
  iterDeps(propertyWillChange, obj, deps, depKey, seen, meta);
17232
- if (top) { WILL_SEEN = null; }
17282
+
17283
+ if (top) {
17284
+ WILL_SEEN = null;
17285
+ }
17233
17286
  }
17234
17287
  }
17235
17288
 
@@ -17241,15 +17294,26 @@ enifed("ember-metal/property_events",
17241
17294
  if (meta && meta.deps && (deps = meta.deps[depKey])) {
17242
17295
  var seen = DID_SEEN;
17243
17296
  var top = !seen;
17244
- if (top) { seen = DID_SEEN = {}; }
17297
+
17298
+ if (top) {
17299
+ seen = DID_SEEN = {};
17300
+ }
17301
+
17245
17302
  iterDeps(propertyDidChange, obj, deps, depKey, seen, meta);
17246
- if (top) { DID_SEEN = null; }
17303
+
17304
+ if (top) {
17305
+ DID_SEEN = null;
17306
+ }
17247
17307
  }
17248
17308
  }
17249
17309
 
17250
17310
  function keysOf(obj) {
17251
17311
  var keys = [];
17252
- for (var key in obj) keys.push(key);
17312
+
17313
+ for (var key in obj) {
17314
+ keys.push(key);
17315
+ }
17316
+
17253
17317
  return keys;
17254
17318
  }
17255
17319
 
@@ -17257,8 +17321,15 @@ enifed("ember-metal/property_events",
17257
17321
  var keys, key, i, desc;
17258
17322
  var guid = guidFor(obj);
17259
17323
  var current = seen[guid];
17260
- if (!current) current = seen[guid] = {};
17261
- if (current[depKey]) return;
17324
+
17325
+ if (!current) {
17326
+ current = seen[guid] = {};
17327
+ }
17328
+
17329
+ if (current[depKey]) {
17330
+ return;
17331
+ }
17332
+
17262
17333
  current[depKey] = true;
17263
17334
 
17264
17335
  if (deps) {
@@ -17267,7 +17338,11 @@ enifed("ember-metal/property_events",
17267
17338
  for (i=0; i<keys.length; i++) {
17268
17339
  key = keys[i];
17269
17340
  desc = descs[key];
17270
- if (desc && desc._suspended === obj) continue;
17341
+
17342
+ if (desc && desc._suspended === obj) {
17343
+ continue;
17344
+ }
17345
+
17271
17346
  method(obj, key);
17272
17347
  }
17273
17348
  }
@@ -17840,14 +17915,8 @@ enifed("ember-metal/run_loop",
17840
17915
  @return {Object} Return value from invoking the passed function. Please note,
17841
17916
  when called within an existing loop, no return value is possible.
17842
17917
  */
17843
- run.join = function(target, method /* args */) {
17844
- if (!run.currentRunLoop) {
17845
- return Ember.run.apply(Ember, arguments);
17846
- }
17847
-
17848
- var args = slice.call(arguments);
17849
- args.unshift('actions');
17850
- run.schedule.apply(run, args);
17918
+ run.join = function() {
17919
+ return backburner.join.apply(backburner, arguments);
17851
17920
  };
17852
17921
 
17853
17922
  /**
@@ -19654,7 +19723,8 @@ enifed("ember-metal/watch_key",
19654
19723
 
19655
19724
 
19656
19725
  function unwatchKey(obj, keyName, meta) {
19657
- var m = meta || metaFor(obj), watching = m.watching;
19726
+ var m = meta || metaFor(obj);
19727
+ var watching = m.watching;
19658
19728
 
19659
19729
  if (watching[keyName] === 1) {
19660
19730
  watching[keyName] = 0;
@@ -25429,11 +25499,15 @@ enifed("ember-routing/system/route",
25429
25499
  }
25430
25500
 
25431
25501
  function generateTopLevelTeardown(view) {
25432
- return function() { view.destroy(); };
25502
+ return function() {
25503
+ view.destroy();
25504
+ };
25433
25505
  }
25434
25506
 
25435
25507
  function generateOutletTeardown(parentView, outlet) {
25436
- return function() { parentView.disconnectOutlet(outlet); };
25508
+ return function() {
25509
+ parentView.disconnectOutlet(outlet);
25510
+ };
25437
25511
  }
25438
25512
 
25439
25513
  function getFullQueryParams(router, state) {
@@ -28633,8 +28707,8 @@ enifed("ember-runtime/controllers/array_controller",
28633
28707
  Then, create a view that binds to your new controller:
28634
28708
 
28635
28709
  ```handlebars
28636
- {{#each MyApp.listController}}
28637
- {{firstName}} {{lastName}}
28710
+ {{#each person in MyApp.listController}}
28711
+ {{person.firstName}} {{person.lastName}}
28638
28712
  {{/each}}
28639
28713
  ```
28640
28714
 
@@ -39120,7 +39194,7 @@ enifed("ember-views/system/event_dispatcher",
39120
39194
  },
39121
39195
 
39122
39196
  _bubbleEvent: function(view, evt, eventName) {
39123
- return run(view, view.handleEvent, eventName, evt);
39197
+ return run.join(view, view.handleEvent, eventName, evt);
39124
39198
  },
39125
39199
 
39126
39200
  destroy: function() {
@@ -40743,6 +40817,30 @@ enifed("ember-views/views/component",
40743
40817
  action: actionName,
40744
40818
  actionContext: contexts
40745
40819
  });
40820
+ },
40821
+
40822
+ send: function(actionName) {
40823
+ var args = [].slice.call(arguments, 1);
40824
+ var target;
40825
+ var hasAction = this._actions && this._actions[actionName];
40826
+
40827
+ if (hasAction) {
40828
+ if (this._actions[actionName].apply(this, args) === true) {
40829
+ // handler returned true, so this action will bubble
40830
+ } else {
40831
+ return;
40832
+ }
40833
+ }
40834
+
40835
+ if (target = get(this, 'target')) {
40836
+ Ember.assert("The `target` for " + this + " (" + target +
40837
+ ") does not have a `send` method", typeof target.send === 'function');
40838
+ target.send.apply(target, arguments);
40839
+ } else {
40840
+ if (!hasAction) {
40841
+ throw new Error(Ember.inspect(this) + ' had no action handler for: ' + actionName);
40842
+ }
40843
+ }
40746
40844
  }
40747
40845
  });
40748
40846