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 +4 -4
- data/VERSION +1 -1
- data/dist/ember-runtime.js +219 -116
- data/dist/ember-testing.js +1 -1
- data/dist/ember-tests.js +1380 -612
- data/dist/ember-tests.prod.js +1380 -612
- data/dist/ember.js +325 -227
- data/dist/ember.min.js +12 -12
- data/dist/ember.prod.js +321 -228
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3b5bdf7f697b229ccfc473515d48c1e117cd5ba4
|
4
|
+
data.tar.gz: 9d459b5467cb8c23c8491811ddd3b475220116f0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 18658ffa6334570fab616173a87f719b697c886782dd1709923a42224ad5a5f53a2a9acc3b1cb47b346ca98ebcb2588303935bb574f1235b69ca86630511d542
|
7
|
+
data.tar.gz: c0d01faf1cd115c9c9185766104dd3b7cd46655a7177f04eb5422305564e432cfc3ef6620383b43c7febc7e8d1e91024924bab68eea9fea60b9e04030b47de00
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.9.0-beta.
|
1
|
+
1.9.0-beta.3
|
data/dist/ember-runtime.js
CHANGED
@@ -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.
|
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}
|
1453
|
+
@param {String} fullName
|
1451
1454
|
@param {Object} options
|
1452
1455
|
*/
|
1453
|
-
options: function(
|
1454
|
-
|
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) {
|
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) {
|
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) {
|
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]) {
|
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) {
|
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)
|
3177
|
+
if (meta && meta.proto === obj) {
|
3178
|
+
return undefined;
|
3179
|
+
}
|
3163
3180
|
|
3164
|
-
if (key === "@each")
|
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) {
|
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
|
-
|
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) {
|
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) {
|
3298
|
+
if (!chains) {
|
3299
|
+
chains = this._chains = {};
|
3300
|
+
}
|
3273
3301
|
|
3274
3302
|
node = chains[key];
|
3275
|
-
if (!node) {
|
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
|
-
|
3293
|
-
|
3294
|
-
node.unchain(
|
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)) {
|
3340
|
+
if (!chains.hasOwnProperty(key)) {
|
3341
|
+
continue;
|
3342
|
+
}
|
3311
3343
|
chains[key].willChange(events);
|
3312
3344
|
}
|
3313
3345
|
}
|
3314
3346
|
|
3315
|
-
if (this._parent) {
|
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) {
|
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) {
|
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) {
|
3416
|
+
if (events === null) {
|
3417
|
+
return;
|
3418
|
+
}
|
3377
3419
|
|
3378
3420
|
// and finally tell parent about my path changing...
|
3379
|
-
if (this._parent) {
|
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
|
-
|
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)) {
|
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
|
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
|
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
|
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
|
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) {
|
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) {
|
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) {
|
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.
|
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.
|
4833
|
+
@default '1.9.0-beta.3'
|
4780
4834
|
@static
|
4781
4835
|
*/
|
4782
|
-
Ember.VERSION = '1.9.0-beta.
|
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 = []
|
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
|
6521
|
-
if (typeof method.
|
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(
|
7732
|
-
|
7733
|
-
|
7734
|
-
|
7735
|
-
|
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
|
-
|
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
|
7833
|
+
var mixin;
|
7770
7834
|
|
7771
7835
|
if (this.properties) {
|
7772
|
-
mixin = Mixin.
|
7773
|
-
|
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
|
-
|
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)) {
|
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) {
|
8831
|
-
|
8832
|
-
|
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) {
|
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) {
|
8863
|
-
|
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
|
-
|
8961
|
+
|
8962
|
+
if (top) {
|
8963
|
+
seen = WILL_SEEN = {};
|
8964
|
+
}
|
8965
|
+
|
8883
8966
|
iterDeps(propertyWillChange, obj, deps, depKey, seen, meta);
|
8884
|
-
|
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
|
-
|
8982
|
+
|
8983
|
+
if (top) {
|
8984
|
+
seen = DID_SEEN = {};
|
8985
|
+
}
|
8986
|
+
|
8897
8987
|
iterDeps(propertyDidChange, obj, deps, depKey, seen, meta);
|
8898
|
-
|
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
|
-
|
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
|
-
|
8913
|
-
if (current
|
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
|
-
|
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(
|
9496
|
-
|
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)
|
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
|
|