ember-source 1.13.12 → 1.13.13
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/VERSION +1 -1
- data/dist/ember-template-compiler.js +1153 -1153
- data/dist/ember-testing.js +1 -1
- data/dist/ember.debug.js +3007 -3023
- data/dist/ember.js +3007 -3023
- data/dist/ember.min.js +14 -14
- data/dist/ember.prod.js +2985 -3000
- 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: aa31a4982e2e253bbad2c88c35b219049f443dd9
|
4
|
+
data.tar.gz: d93b967c42599cdfd2ad5f76713e986e319c8004
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7f3ca5c7b0b70bc78654c2298ec237f756bfe7d883d252bddf37ac562c7e314f6f62a6d22fcd6070396fda7904770e8df9a91bf552dc43e96cc14d2b60957ad8
|
7
|
+
data.tar.gz: 693f7574fed20beaea45b12b107a5ac8a35053b34a4518e9f7481d4f8177d9df48addec19b4b5b0df765716628dab6018406d05032ca8a03bd85df8414de361d
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.13.
|
1
|
+
1.13.13
|
@@ -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.13.
|
8
|
+
* @version 1.13.13
|
9
9
|
*/
|
10
10
|
|
11
11
|
(function() {
|
@@ -1871,1410 +1871,1410 @@ enifed("ember-metal/chains", ["exports", "ember-metal/core", "ember-metal/proper
|
|
1871
1871
|
exports.ChainNode = ChainNode;
|
1872
1872
|
});
|
1873
1873
|
// warn, assert, etc;
|
1874
|
-
enifed("ember-metal/
|
1874
|
+
enifed("ember-metal/computed", ["exports", "ember-metal/core", "ember-metal/property_set", "ember-metal/utils", "ember-metal/expand_properties", "ember-metal/error", "ember-metal/properties", "ember-metal/property_events", "ember-metal/dependent_keys"], function (exports, _emberMetalCore, _emberMetalProperty_set, _emberMetalUtils, _emberMetalExpand_properties, _emberMetalError, _emberMetalProperties, _emberMetalProperty_events, _emberMetalDependent_keys) {
|
1875
1875
|
"use strict";
|
1876
1876
|
|
1877
|
-
exports.empty = empty;
|
1878
|
-
exports.notEmpty = notEmpty;
|
1879
|
-
exports.none = none;
|
1880
|
-
exports.not = not;
|
1881
|
-
exports.bool = bool;
|
1882
|
-
exports.match = match;
|
1883
|
-
exports.equal = equal;
|
1884
|
-
exports.gt = gt;
|
1885
|
-
exports.gte = gte;
|
1886
|
-
exports.lt = lt;
|
1887
|
-
exports.lte = lte;
|
1888
|
-
exports.oneWay = oneWay;
|
1889
|
-
exports.readOnly = readOnly;
|
1890
|
-
exports.defaultTo = defaultTo;
|
1891
|
-
exports.deprecatingAlias = deprecatingAlias;
|
1892
|
-
|
1893
1877
|
/**
|
1894
1878
|
@module ember
|
1895
1879
|
@submodule ember-metal
|
1896
1880
|
*/
|
1897
1881
|
|
1898
|
-
|
1899
|
-
var ret = {};
|
1900
|
-
for (var i = 0; i < propertyNames.length; i++) {
|
1901
|
-
ret[propertyNames[i]] = _emberMetalProperty_get.get(self, propertyNames[i]);
|
1902
|
-
}
|
1903
|
-
return ret;
|
1904
|
-
}
|
1905
|
-
|
1906
|
-
function generateComputedWithProperties(macro) {
|
1907
|
-
return function () {
|
1908
|
-
for (var _len = arguments.length, properties = Array(_len), _key = 0; _key < _len; _key++) {
|
1909
|
-
properties[_key] = arguments[_key];
|
1910
|
-
}
|
1882
|
+
var metaFor = _emberMetalUtils.meta;
|
1911
1883
|
|
1912
|
-
|
1913
|
-
return macro.apply(this, [getProperties(this, properties)]);
|
1914
|
-
});
|
1884
|
+
function UNDEFINED() {}
|
1915
1885
|
|
1916
|
-
|
1917
|
-
|
1918
|
-
|
1886
|
+
// ..........................................................
|
1887
|
+
// COMPUTED PROPERTY
|
1888
|
+
//
|
1919
1889
|
|
1920
1890
|
/**
|
1921
|
-
A computed property
|
1922
|
-
property is null, an empty string, empty array, or empty function.
|
1891
|
+
A computed property transforms an object's function into a property.
|
1923
1892
|
|
1924
|
-
|
1893
|
+
By default the function backing the computed property will only be called
|
1894
|
+
once and the result will be cached. You can specify various properties
|
1895
|
+
that your computed property depends on. This will force the cached
|
1896
|
+
result to be recomputed if the dependencies are modified.
|
1897
|
+
|
1898
|
+
In the following example we declare a computed property (by calling
|
1899
|
+
`.property()` on the fullName function) and setup the property
|
1900
|
+
dependencies (depending on firstName and lastName). The fullName function
|
1901
|
+
will be called once (regardless of how many times it is accessed) as long
|
1902
|
+
as its dependencies have not changed. Once firstName or lastName are updated
|
1903
|
+
any future calls (or anything bound) to fullName will incorporate the new
|
1904
|
+
values.
|
1925
1905
|
|
1926
1906
|
```javascript
|
1927
|
-
var
|
1928
|
-
|
1907
|
+
var Person = Ember.Object.extend({
|
1908
|
+
// these will be supplied by `create`
|
1909
|
+
firstName: null,
|
1910
|
+
lastName: null,
|
1911
|
+
|
1912
|
+
fullName: function() {
|
1913
|
+
var firstName = this.get('firstName');
|
1914
|
+
var lastName = this.get('lastName');
|
1915
|
+
|
1916
|
+
return firstName + ' ' + lastName;
|
1917
|
+
}.property('firstName', 'lastName')
|
1929
1918
|
});
|
1930
1919
|
|
1931
|
-
var
|
1932
|
-
|
1920
|
+
var tom = Person.create({
|
1921
|
+
firstName: 'Tom',
|
1922
|
+
lastName: 'Dale'
|
1933
1923
|
});
|
1934
1924
|
|
1935
|
-
|
1936
|
-
todoList.get('todos').clear();
|
1937
|
-
todoList.get('isDone'); // true
|
1925
|
+
tom.get('fullName') // 'Tom Dale'
|
1938
1926
|
```
|
1939
1927
|
|
1940
|
-
|
1941
|
-
|
1942
|
-
|
1943
|
-
|
1944
|
-
@return {Ember.ComputedProperty} computed property which negate
|
1945
|
-
the original value for property
|
1946
|
-
@public
|
1947
|
-
*/
|
1948
|
-
|
1949
|
-
function empty(dependentKey) {
|
1950
|
-
return _emberMetalComputed.computed(dependentKey + '.length', function () {
|
1951
|
-
return _emberMetalIs_empty["default"](_emberMetalProperty_get.get(this, dependentKey));
|
1952
|
-
});
|
1953
|
-
}
|
1954
|
-
|
1955
|
-
/**
|
1956
|
-
A computed property that returns true if the value of the dependent
|
1957
|
-
property is NOT null, an empty string, empty array, or empty function.
|
1958
|
-
|
1959
|
-
Example
|
1928
|
+
You can also define what Ember should do when setting a computed property.
|
1929
|
+
If you try to set a computed property, it will be invoked with the key and
|
1930
|
+
value you want to set it to. You can also accept the previous value as the
|
1931
|
+
third parameter.
|
1960
1932
|
|
1961
1933
|
```javascript
|
1962
|
-
var
|
1963
|
-
|
1934
|
+
var Person = Ember.Object.extend({
|
1935
|
+
// these will be supplied by `create`
|
1936
|
+
firstName: null,
|
1937
|
+
lastName: null,
|
1938
|
+
|
1939
|
+
fullName: function(key, value, oldValue) {
|
1940
|
+
// getter
|
1941
|
+
if (arguments.length === 1) {
|
1942
|
+
var firstName = this.get('firstName');
|
1943
|
+
var lastName = this.get('lastName');
|
1944
|
+
|
1945
|
+
return firstName + ' ' + lastName;
|
1946
|
+
|
1947
|
+
// setter
|
1948
|
+
} else {
|
1949
|
+
var name = value.split(' ');
|
1950
|
+
|
1951
|
+
this.set('firstName', name[0]);
|
1952
|
+
this.set('lastName', name[1]);
|
1953
|
+
|
1954
|
+
return value;
|
1955
|
+
}
|
1956
|
+
}.property('firstName', 'lastName')
|
1964
1957
|
});
|
1965
1958
|
|
1966
|
-
var
|
1959
|
+
var person = Person.create();
|
1967
1960
|
|
1968
|
-
|
1969
|
-
|
1970
|
-
|
1961
|
+
person.set('fullName', 'Peter Wagenet');
|
1962
|
+
person.get('firstName'); // 'Peter'
|
1963
|
+
person.get('lastName'); // 'Wagenet'
|
1971
1964
|
```
|
1972
1965
|
|
1973
|
-
@
|
1974
|
-
@
|
1975
|
-
@
|
1976
|
-
@return {Ember.ComputedProperty} computed property which returns true if
|
1977
|
-
original value for property is not empty.
|
1966
|
+
@class ComputedProperty
|
1967
|
+
@namespace Ember
|
1968
|
+
@constructor
|
1978
1969
|
@public
|
1979
1970
|
*/
|
1971
|
+
function ComputedProperty(config, opts) {
|
1972
|
+
this.isDescriptor = true;
|
1973
|
+
if (typeof config === "function") {
|
1974
|
+
config.__ember_arity = config.length;
|
1975
|
+
this._getter = config;
|
1976
|
+
if (config.__ember_arity > 1) {
|
1977
|
+
_emberMetalCore["default"].deprecate("Using the same function as getter and setter is deprecated.", false, {
|
1978
|
+
url: "http://emberjs.com/deprecations/v1.x/#toc_deprecate-using-the-same-function-as-getter-and-setter-in-computed-properties"
|
1979
|
+
});
|
1980
|
+
this._setter = config;
|
1981
|
+
}
|
1982
|
+
} else {
|
1983
|
+
this._getter = config.get;
|
1984
|
+
this._setter = config.set;
|
1985
|
+
if (this._setter && this._setter.__ember_arity === undefined) {
|
1986
|
+
this._setter.__ember_arity = this._setter.length;
|
1987
|
+
}
|
1988
|
+
}
|
1980
1989
|
|
1981
|
-
|
1982
|
-
|
1983
|
-
|
1984
|
-
|
1990
|
+
this._dependentKeys = undefined;
|
1991
|
+
this._suspended = undefined;
|
1992
|
+
this._meta = undefined;
|
1993
|
+
|
1994
|
+
_emberMetalCore["default"].deprecate("Passing opts.cacheable to the CP constructor is deprecated. Invoke `volatile()` on the CP instead.", !opts || !opts.hasOwnProperty('cacheable'));
|
1995
|
+
this._cacheable = opts && opts.cacheable !== undefined ? opts.cacheable : true; // TODO: Set always to `true` once this deprecation is gone.
|
1996
|
+
this._dependentKeys = opts && opts.dependentKeys;
|
1997
|
+
_emberMetalCore["default"].deprecate("Passing opts.readOnly to the CP constructor is deprecated. All CPs are writable by default. You can invoke `readOnly()` on the CP to change this.", !opts || !opts.hasOwnProperty('readOnly'));
|
1998
|
+
this._readOnly = opts && (opts.readOnly !== undefined || !!opts.readOnly) || false; // TODO: Set always to `false` once this deprecation is gone.
|
1985
1999
|
}
|
1986
2000
|
|
2001
|
+
ComputedProperty.prototype = new _emberMetalProperties.Descriptor();
|
2002
|
+
|
2003
|
+
var ComputedPropertyPrototype = ComputedProperty.prototype;
|
2004
|
+
|
1987
2005
|
/**
|
1988
|
-
|
1989
|
-
|
1990
|
-
about use of ==, which can be technically confusing.
|
2006
|
+
Properties are cacheable by default. Computed property will automatically
|
2007
|
+
cache the return value of your function until one of the dependent keys changes.
|
1991
2008
|
|
1992
|
-
|
2009
|
+
Call `volatile()` to set it into non-cached mode. When in this mode
|
2010
|
+
the computed property will not automatically cache the return value.
|
1993
2011
|
|
1994
|
-
|
1995
|
-
|
1996
|
-
isHungry: Ember.computed.none('food')
|
1997
|
-
});
|
2012
|
+
However, if a property is properly observable, there is no reason to disable
|
2013
|
+
caching.
|
1998
2014
|
|
1999
|
-
|
2015
|
+
@method cacheable
|
2016
|
+
@param {Boolean} aFlag optional set to `false` to disable caching
|
2017
|
+
@return {Ember.ComputedProperty} this
|
2018
|
+
@chainable
|
2019
|
+
@deprecated All computed properties are cacheble by default. Use `volatile()` instead to opt-out to caching.
|
2020
|
+
@public
|
2021
|
+
*/
|
2022
|
+
ComputedPropertyPrototype.cacheable = function (aFlag) {
|
2023
|
+
_emberMetalCore["default"].deprecate('ComputedProperty.cacheable() is deprecated. All computed properties are cacheable by default.');
|
2024
|
+
this._cacheable = aFlag !== false;
|
2025
|
+
return this;
|
2026
|
+
};
|
2027
|
+
|
2028
|
+
/**
|
2029
|
+
Call on a computed property to set it into non-cached mode. When in this
|
2030
|
+
mode the computed property will not automatically cache the return value.
|
2000
2031
|
|
2001
|
-
|
2002
|
-
|
2003
|
-
|
2004
|
-
|
2005
|
-
|
2032
|
+
```javascript
|
2033
|
+
var outsideService = Ember.Object.extend({
|
2034
|
+
value: function() {
|
2035
|
+
return OutsideService.getValue();
|
2036
|
+
}.property().volatile()
|
2037
|
+
}).create();
|
2006
2038
|
```
|
2007
2039
|
|
2008
|
-
@method
|
2009
|
-
@
|
2010
|
-
@
|
2011
|
-
@return {Ember.ComputedProperty} computed property which
|
2012
|
-
returns true if original value for property is null or undefined.
|
2040
|
+
@method volatile
|
2041
|
+
@return {Ember.ComputedProperty} this
|
2042
|
+
@chainable
|
2013
2043
|
@public
|
2014
2044
|
*/
|
2015
|
-
|
2016
|
-
|
2017
|
-
return
|
2018
|
-
|
2019
|
-
});
|
2020
|
-
}
|
2045
|
+
ComputedPropertyPrototype["volatile"] = function () {
|
2046
|
+
this._cacheable = false;
|
2047
|
+
return this;
|
2048
|
+
};
|
2021
2049
|
|
2022
2050
|
/**
|
2023
|
-
|
2024
|
-
|
2025
|
-
|
2026
|
-
Example
|
2051
|
+
Call on a computed property to set it into read-only mode. When in this
|
2052
|
+
mode the computed property will throw an error when set.
|
2027
2053
|
|
2028
2054
|
```javascript
|
2029
|
-
var
|
2030
|
-
|
2055
|
+
var Person = Ember.Object.extend({
|
2056
|
+
guid: function() {
|
2057
|
+
return 'guid-guid-guid';
|
2058
|
+
}.property().readOnly()
|
2031
2059
|
});
|
2032
2060
|
|
2033
|
-
var
|
2061
|
+
var person = Person.create();
|
2034
2062
|
|
2035
|
-
|
2036
|
-
user.set('loggedIn', true);
|
2037
|
-
user.get('isAnonymous'); // false
|
2063
|
+
person.set('guid', 'new-guid'); // will throw an exception
|
2038
2064
|
```
|
2039
2065
|
|
2040
|
-
@method
|
2041
|
-
@
|
2042
|
-
@
|
2043
|
-
@return {Ember.ComputedProperty} computed property which returns
|
2044
|
-
inverse of the original value for property
|
2066
|
+
@method readOnly
|
2067
|
+
@return {Ember.ComputedProperty} this
|
2068
|
+
@chainable
|
2045
2069
|
@public
|
2046
2070
|
*/
|
2047
|
-
|
2048
|
-
|
2049
|
-
|
2050
|
-
|
2051
|
-
|
2052
|
-
}
|
2071
|
+
ComputedPropertyPrototype.readOnly = function (readOnly) {
|
2072
|
+
_emberMetalCore["default"].deprecate('Passing arguments to ComputedProperty.readOnly() is deprecated.', arguments.length === 0);
|
2073
|
+
this._readOnly = readOnly === undefined || !!readOnly; // Force to true once this deprecation is gone
|
2074
|
+
_emberMetalCore["default"].assert("Computed properties that define a setter using the new syntax cannot be read-only", !(this._readOnly && this._setter && this._setter !== this._getter));
|
2075
|
+
return this;
|
2076
|
+
};
|
2053
2077
|
|
2054
2078
|
/**
|
2055
|
-
|
2056
|
-
|
2079
|
+
Sets the dependent keys on this computed property. Pass any number of
|
2080
|
+
arguments containing key paths that this computed property depends on.
|
2057
2081
|
|
2058
2082
|
```javascript
|
2059
|
-
var
|
2060
|
-
|
2083
|
+
var President = Ember.Object.extend({
|
2084
|
+
fullName: computed(function() {
|
2085
|
+
return this.get('firstName') + ' ' + this.get('lastName');
|
2086
|
+
|
2087
|
+
// Tell Ember that this computed property depends on firstName
|
2088
|
+
// and lastName
|
2089
|
+
}).property('firstName', 'lastName')
|
2061
2090
|
});
|
2062
2091
|
|
2063
|
-
var
|
2092
|
+
var president = President.create({
|
2093
|
+
firstName: 'Barack',
|
2094
|
+
lastName: 'Obama'
|
2095
|
+
});
|
2064
2096
|
|
2065
|
-
|
2066
|
-
hamster.set('numBananas', 0);
|
2067
|
-
hamster.get('hasBananas'); // false
|
2068
|
-
hamster.set('numBananas', 1);
|
2069
|
-
hamster.get('hasBananas'); // true
|
2070
|
-
hamster.set('numBananas', null);
|
2071
|
-
hamster.get('hasBananas'); // false
|
2097
|
+
president.get('fullName'); // 'Barack Obama'
|
2072
2098
|
```
|
2073
2099
|
|
2074
|
-
@method
|
2075
|
-
@
|
2076
|
-
@
|
2077
|
-
@
|
2078
|
-
to boolean the original value for property
|
2100
|
+
@method property
|
2101
|
+
@param {String} path* zero or more property paths
|
2102
|
+
@return {Ember.ComputedProperty} this
|
2103
|
+
@chainable
|
2079
2104
|
@public
|
2080
2105
|
*/
|
2106
|
+
ComputedPropertyPrototype.property = function () {
|
2107
|
+
var args;
|
2081
2108
|
|
2082
|
-
|
2083
|
-
|
2084
|
-
|
2085
|
-
|
2086
|
-
|
2109
|
+
var addArg = function (property) {
|
2110
|
+
_emberMetalCore["default"].deprecate("Depending on arrays using a dependent key ending with `@each` is deprecated. " + ("Please refactor from `Ember.computed('" + property + "', function() {});` to `Ember.computed('" + property.slice(0, -6) + ".[]', function() {})`."), property.slice(-5) !== '@each', { id: 'ember-metal.@each-dependent-key-leaf', until: '2.0.0' });
|
2111
|
+
|
2112
|
+
args.push(property);
|
2113
|
+
};
|
2114
|
+
|
2115
|
+
args = [];
|
2116
|
+
for (var i = 0, l = arguments.length; i < l; i++) {
|
2117
|
+
_emberMetalExpand_properties["default"](arguments[i], addArg);
|
2118
|
+
}
|
2119
|
+
|
2120
|
+
this._dependentKeys = args;
|
2121
|
+
return this;
|
2122
|
+
};
|
2087
2123
|
|
2088
2124
|
/**
|
2089
|
-
|
2090
|
-
|
2091
|
-
|
2092
|
-
|
2093
|
-
Example
|
2094
|
-
|
2095
|
-
```javascript
|
2096
|
-
var User = Ember.Object.extend({
|
2097
|
-
hasValidEmail: Ember.computed.match('email', /^.+@.+\..+$/)
|
2098
|
-
});
|
2125
|
+
In some cases, you may want to annotate computed properties with additional
|
2126
|
+
metadata about how they function or what values they operate on. For example,
|
2127
|
+
computed property functions may close over variables that are then no longer
|
2128
|
+
available for introspection.
|
2099
2129
|
|
2100
|
-
|
2130
|
+
You can pass a hash of these values to a computed property like this:
|
2101
2131
|
|
2102
|
-
|
2103
|
-
|
2104
|
-
|
2105
|
-
|
2106
|
-
|
2132
|
+
```
|
2133
|
+
person: function() {
|
2134
|
+
var personId = this.get('personId');
|
2135
|
+
return App.Person.create({ id: personId });
|
2136
|
+
}.property().meta({ type: App.Person })
|
2107
2137
|
```
|
2108
2138
|
|
2109
|
-
|
2110
|
-
|
2111
|
-
|
2112
|
-
|
2113
|
-
|
2114
|
-
|
2139
|
+
The hash that you pass to the `meta()` function will be saved on the
|
2140
|
+
computed property descriptor under the `_meta` key. Ember runtime
|
2141
|
+
exposes a public API for retrieving these values from classes,
|
2142
|
+
via the `metaForProperty()` function.
|
2143
|
+
|
2144
|
+
@method meta
|
2145
|
+
@param {Object} meta
|
2146
|
+
@chainable
|
2115
2147
|
@public
|
2116
2148
|
*/
|
2117
2149
|
|
2118
|
-
function
|
2119
|
-
|
2120
|
-
|
2150
|
+
ComputedPropertyPrototype.meta = function (meta) {
|
2151
|
+
if (arguments.length === 0) {
|
2152
|
+
return this._meta || {};
|
2153
|
+
} else {
|
2154
|
+
this._meta = meta;
|
2155
|
+
return this;
|
2156
|
+
}
|
2157
|
+
};
|
2121
2158
|
|
2122
|
-
|
2123
|
-
|
2159
|
+
/* impl descriptor API */
|
2160
|
+
ComputedPropertyPrototype.didChange = function (obj, keyName) {
|
2161
|
+
// _suspended is set via a CP.set to ensure we don't clear
|
2162
|
+
// the cached value set by the setter
|
2163
|
+
if (this._cacheable && this._suspended !== obj) {
|
2164
|
+
var meta = metaFor(obj);
|
2165
|
+
if (meta.cache && meta.cache[keyName] !== undefined) {
|
2166
|
+
meta.cache[keyName] = undefined;
|
2167
|
+
_emberMetalDependent_keys.removeDependentKeys(this, obj, keyName, meta);
|
2168
|
+
}
|
2169
|
+
}
|
2170
|
+
};
|
2171
|
+
|
2172
|
+
function finishChains(chainNodes) {
|
2173
|
+
for (var i = 0, l = chainNodes.length; i < l; i++) {
|
2174
|
+
chainNodes[i].didChange(null);
|
2175
|
+
}
|
2124
2176
|
}
|
2125
2177
|
|
2126
2178
|
/**
|
2127
|
-
|
2128
|
-
|
2129
|
-
|
2130
|
-
Example
|
2179
|
+
Access the value of the function backing the computed property.
|
2180
|
+
If this property has already been cached, return the cached result.
|
2181
|
+
Otherwise, call the function passing the property name as an argument.
|
2131
2182
|
|
2132
2183
|
```javascript
|
2133
|
-
var
|
2134
|
-
|
2184
|
+
var Person = Ember.Object.extend({
|
2185
|
+
fullName: function(keyName) {
|
2186
|
+
// the keyName parameter is 'fullName' in this case.
|
2187
|
+
return this.get('firstName') + ' ' + this.get('lastName');
|
2188
|
+
}.property('firstName', 'lastName')
|
2135
2189
|
});
|
2136
2190
|
|
2137
|
-
var hamster = Hamster.create();
|
2138
2191
|
|
2139
|
-
|
2140
|
-
|
2141
|
-
|
2142
|
-
|
2143
|
-
|
2192
|
+
var tom = Person.create({
|
2193
|
+
firstName: 'Tom',
|
2194
|
+
lastName: 'Dale'
|
2195
|
+
});
|
2196
|
+
|
2197
|
+
tom.get('fullName') // 'Tom Dale'
|
2144
2198
|
```
|
2145
2199
|
|
2146
|
-
@method
|
2147
|
-
@
|
2148
|
-
@
|
2149
|
-
@param {String|Number|Object} value
|
2150
|
-
@return {Ember.ComputedProperty} computed property which returns true if
|
2151
|
-
the original value for property is equal to the given value.
|
2200
|
+
@method get
|
2201
|
+
@param {String} keyName The key being accessed.
|
2202
|
+
@return {Object} The return value of the function backing the CP.
|
2152
2203
|
@public
|
2153
2204
|
*/
|
2205
|
+
ComputedPropertyPrototype.get = function (obj, keyName) {
|
2206
|
+
var ret, cache, meta, chainNodes;
|
2207
|
+
if (this._cacheable) {
|
2208
|
+
meta = metaFor(obj);
|
2209
|
+
cache = meta.cache;
|
2154
2210
|
|
2155
|
-
|
2156
|
-
|
2157
|
-
|
2158
|
-
|
2159
|
-
|
2211
|
+
var result = cache && cache[keyName];
|
2212
|
+
|
2213
|
+
if (result === UNDEFINED) {
|
2214
|
+
return undefined;
|
2215
|
+
} else if (result !== undefined) {
|
2216
|
+
return result;
|
2217
|
+
}
|
2218
|
+
|
2219
|
+
ret = this._getter.call(obj, keyName);
|
2220
|
+
cache = meta.cache;
|
2221
|
+
if (!cache) {
|
2222
|
+
cache = meta.cache = {};
|
2223
|
+
}
|
2224
|
+
if (ret === undefined) {
|
2225
|
+
cache[keyName] = UNDEFINED;
|
2226
|
+
} else {
|
2227
|
+
cache[keyName] = ret;
|
2228
|
+
}
|
2229
|
+
|
2230
|
+
chainNodes = meta.chainWatchers && meta.chainWatchers[keyName];
|
2231
|
+
if (chainNodes) {
|
2232
|
+
finishChains(chainNodes);
|
2233
|
+
}
|
2234
|
+
_emberMetalDependent_keys.addDependentKeys(this, obj, keyName, meta);
|
2235
|
+
} else {
|
2236
|
+
ret = this._getter.call(obj, keyName);
|
2237
|
+
}
|
2238
|
+
return ret;
|
2239
|
+
};
|
2160
2240
|
|
2161
2241
|
/**
|
2162
|
-
|
2163
|
-
|
2242
|
+
Set the value of a computed property. If the function that backs your
|
2243
|
+
computed property does not accept arguments then the default action for
|
2244
|
+
setting would be to define the property on the current object, and set
|
2245
|
+
the value of the property to the value being set.
|
2164
2246
|
|
2165
|
-
|
2247
|
+
Generally speaking if you intend for your computed property to be set
|
2248
|
+
your backing function should accept either two or three arguments.
|
2166
2249
|
|
2167
2250
|
```javascript
|
2168
|
-
var
|
2169
|
-
|
2170
|
-
|
2251
|
+
var Person = Ember.Object.extend({
|
2252
|
+
// these will be supplied by `create`
|
2253
|
+
firstName: null,
|
2254
|
+
lastName: null,
|
2171
2255
|
|
2172
|
-
|
2256
|
+
fullName: function(key, value, oldValue) {
|
2257
|
+
// getter
|
2258
|
+
if (arguments.length === 1) {
|
2259
|
+
var firstName = this.get('firstName');
|
2260
|
+
var lastName = this.get('lastName');
|
2173
2261
|
|
2174
|
-
|
2175
|
-
hamster.set('numBananas', 3);
|
2176
|
-
hamster.get('hasTooManyBananas'); // false
|
2177
|
-
hamster.set('numBananas', 11);
|
2178
|
-
hamster.get('hasTooManyBananas'); // true
|
2179
|
-
```
|
2262
|
+
return firstName + ' ' + lastName;
|
2180
2263
|
|
2181
|
-
|
2182
|
-
|
2183
|
-
|
2184
|
-
@param {Number} value
|
2185
|
-
@return {Ember.ComputedProperty} computed property which returns true if
|
2186
|
-
the original value for property is greater than given value.
|
2187
|
-
@public
|
2188
|
-
*/
|
2189
|
-
|
2190
|
-
function gt(dependentKey, value) {
|
2191
|
-
return _emberMetalComputed.computed(dependentKey, function () {
|
2192
|
-
return _emberMetalProperty_get.get(this, dependentKey) > value;
|
2193
|
-
});
|
2194
|
-
}
|
2195
|
-
|
2196
|
-
/**
|
2197
|
-
A computed property that returns true if the provided dependent property
|
2198
|
-
is greater than or equal to the provided value.
|
2264
|
+
// setter
|
2265
|
+
} else {
|
2266
|
+
var name = value.split(' ');
|
2199
2267
|
|
2200
|
-
|
2268
|
+
this.set('firstName', name[0]);
|
2269
|
+
this.set('lastName', name[1]);
|
2201
2270
|
|
2202
|
-
|
2203
|
-
|
2204
|
-
|
2271
|
+
return value;
|
2272
|
+
}
|
2273
|
+
}.property('firstName', 'lastName')
|
2205
2274
|
});
|
2206
2275
|
|
2207
|
-
var
|
2276
|
+
var person = Person.create();
|
2208
2277
|
|
2209
|
-
|
2210
|
-
|
2211
|
-
|
2212
|
-
hamster.set('numBananas', 10);
|
2213
|
-
hamster.get('hasTooManyBananas'); // true
|
2278
|
+
person.set('fullName', 'Peter Wagenet');
|
2279
|
+
person.get('firstName'); // 'Peter'
|
2280
|
+
person.get('lastName'); // 'Wagenet'
|
2214
2281
|
```
|
2215
2282
|
|
2216
|
-
@method
|
2217
|
-
@
|
2218
|
-
@param {
|
2219
|
-
@param {
|
2220
|
-
@return {
|
2221
|
-
the original value for property is greater or equal then given value.
|
2283
|
+
@method set
|
2284
|
+
@param {String} keyName The key being accessed.
|
2285
|
+
@param {Object} newValue The new value being assigned.
|
2286
|
+
@param {String} oldValue The old value being replaced.
|
2287
|
+
@return {Object} The return value of the function backing the CP.
|
2222
2288
|
@public
|
2223
2289
|
*/
|
2290
|
+
ComputedPropertyPrototype.set = function computedPropertySetWithSuspend(obj, keyName, value) {
|
2291
|
+
var oldSuspended = this._suspended;
|
2224
2292
|
|
2225
|
-
|
2226
|
-
|
2227
|
-
|
2228
|
-
|
2229
|
-
|
2293
|
+
this._suspended = obj;
|
2294
|
+
|
2295
|
+
try {
|
2296
|
+
this._set(obj, keyName, value);
|
2297
|
+
} finally {
|
2298
|
+
this._suspended = oldSuspended;
|
2299
|
+
}
|
2300
|
+
};
|
2301
|
+
|
2302
|
+
ComputedPropertyPrototype._set = function computedPropertySet(obj, keyName, value) {
|
2303
|
+
var cacheable = this._cacheable;
|
2304
|
+
var setter = this._setter;
|
2305
|
+
var meta = metaFor(obj, cacheable);
|
2306
|
+
var cache = meta.cache;
|
2307
|
+
var hadCachedValue = false;
|
2308
|
+
|
2309
|
+
var cachedValue, ret;
|
2310
|
+
|
2311
|
+
if (this._readOnly) {
|
2312
|
+
throw new _emberMetalError["default"]("Cannot set read-only property \"" + keyName + "\" on object: " + _emberMetalUtils.inspect(obj));
|
2313
|
+
}
|
2314
|
+
|
2315
|
+
if (cacheable && cache && cache[keyName] !== undefined) {
|
2316
|
+
if (cache[keyName] !== UNDEFINED) {
|
2317
|
+
cachedValue = cache[keyName];
|
2318
|
+
}
|
2319
|
+
|
2320
|
+
hadCachedValue = true;
|
2321
|
+
}
|
2322
|
+
|
2323
|
+
if (!setter) {
|
2324
|
+
_emberMetalProperties.defineProperty(obj, keyName, null, cachedValue);
|
2325
|
+
_emberMetalProperty_set.set(obj, keyName, value);
|
2326
|
+
return;
|
2327
|
+
} else if (setter.__ember_arity === 2) {
|
2328
|
+
// Is there any way of deprecate this in a sensitive way?
|
2329
|
+
// Maybe now that getters and setters are the prefered options we can....
|
2330
|
+
ret = setter.call(obj, keyName, value);
|
2331
|
+
} else {
|
2332
|
+
ret = setter.call(obj, keyName, value, cachedValue);
|
2333
|
+
}
|
2334
|
+
|
2335
|
+
if (hadCachedValue && cachedValue === ret) {
|
2336
|
+
return;
|
2337
|
+
}
|
2338
|
+
|
2339
|
+
var watched = meta.watching[keyName];
|
2340
|
+
if (watched) {
|
2341
|
+
_emberMetalProperty_events.propertyWillChange(obj, keyName);
|
2342
|
+
}
|
2343
|
+
|
2344
|
+
if (hadCachedValue) {
|
2345
|
+
cache[keyName] = undefined;
|
2346
|
+
}
|
2347
|
+
|
2348
|
+
if (cacheable) {
|
2349
|
+
if (!hadCachedValue) {
|
2350
|
+
_emberMetalDependent_keys.addDependentKeys(this, obj, keyName, meta);
|
2351
|
+
}
|
2352
|
+
if (!cache) {
|
2353
|
+
cache = meta.cache = {};
|
2354
|
+
}
|
2355
|
+
if (ret === undefined) {
|
2356
|
+
cache[keyName] = UNDEFINED;
|
2357
|
+
} else {
|
2358
|
+
cache[keyName] = ret;
|
2359
|
+
}
|
2360
|
+
}
|
2361
|
+
|
2362
|
+
if (watched) {
|
2363
|
+
_emberMetalProperty_events.propertyDidChange(obj, keyName);
|
2364
|
+
}
|
2365
|
+
|
2366
|
+
return ret;
|
2367
|
+
};
|
2368
|
+
|
2369
|
+
/* called before property is overridden */
|
2370
|
+
ComputedPropertyPrototype.teardown = function (obj, keyName) {
|
2371
|
+
var meta = metaFor(obj);
|
2372
|
+
|
2373
|
+
if (meta.cache) {
|
2374
|
+
if (keyName in meta.cache) {
|
2375
|
+
_emberMetalDependent_keys.removeDependentKeys(this, obj, keyName, meta);
|
2376
|
+
}
|
2377
|
+
|
2378
|
+
if (this._cacheable) {
|
2379
|
+
delete meta.cache[keyName];
|
2380
|
+
}
|
2381
|
+
}
|
2382
|
+
|
2383
|
+
return null; // no value to restore
|
2384
|
+
};
|
2230
2385
|
|
2231
2386
|
/**
|
2232
|
-
|
2233
|
-
|
2234
|
-
|
2235
|
-
Example
|
2387
|
+
This helper returns a new property descriptor that wraps the passed
|
2388
|
+
computed property function. You can use this helper to define properties
|
2389
|
+
with mixins or via `Ember.defineProperty()`.
|
2236
2390
|
|
2237
|
-
|
2238
|
-
|
2239
|
-
|
2240
|
-
|
2391
|
+
The function you pass will be used to both get and set property values.
|
2392
|
+
The function should accept two parameters, key and value. If value is not
|
2393
|
+
undefined you should set the value first. In either case return the
|
2394
|
+
current value of the property.
|
2241
2395
|
|
2242
|
-
|
2396
|
+
A computed property defined in this way might look like this:
|
2243
2397
|
|
2244
|
-
|
2245
|
-
|
2246
|
-
|
2247
|
-
|
2248
|
-
hamster.get('needsMoreBananas'); // true
|
2249
|
-
```
|
2398
|
+
```js
|
2399
|
+
var Person = Ember.Object.extend({
|
2400
|
+
firstName: 'Betty',
|
2401
|
+
lastName: 'Jones',
|
2250
2402
|
|
2251
|
-
|
2252
|
-
|
2253
|
-
|
2254
|
-
@param {Number} value
|
2255
|
-
@return {Ember.ComputedProperty} computed property which returns true if
|
2256
|
-
the original value for property is less then given value.
|
2257
|
-
@public
|
2258
|
-
*/
|
2259
|
-
|
2260
|
-
function lt(dependentKey, value) {
|
2261
|
-
return _emberMetalComputed.computed(dependentKey, function () {
|
2262
|
-
return _emberMetalProperty_get.get(this, dependentKey) < value;
|
2403
|
+
fullName: Ember.computed('firstName', 'lastName', function(key, value) {
|
2404
|
+
return this.get('firstName') + ' ' + this.get('lastName');
|
2405
|
+
})
|
2263
2406
|
});
|
2264
|
-
}
|
2265
|
-
|
2266
|
-
/**
|
2267
|
-
A computed property that returns true if the provided dependent property
|
2268
|
-
is less than or equal to the provided value.
|
2269
2407
|
|
2270
|
-
|
2408
|
+
var client = Person.create();
|
2271
2409
|
|
2272
|
-
|
2273
|
-
var Hamster = Ember.Object.extend({
|
2274
|
-
needsMoreBananas: Ember.computed.lte('numBananas', 3)
|
2275
|
-
});
|
2410
|
+
client.get('fullName'); // 'Betty Jones'
|
2276
2411
|
|
2277
|
-
|
2412
|
+
client.set('lastName', 'Fuller');
|
2413
|
+
client.get('fullName'); // 'Betty Fuller'
|
2414
|
+
```
|
2278
2415
|
|
2279
|
-
|
2280
|
-
|
2281
|
-
|
2282
|
-
|
2283
|
-
|
2416
|
+
_Note: This is the preferred way to define computed properties when writing third-party
|
2417
|
+
libraries that depend on or use Ember, since there is no guarantee that the user
|
2418
|
+
will have prototype extensions enabled._
|
2419
|
+
|
2420
|
+
You might use this method if you disabled
|
2421
|
+
[Prototype Extensions](http://emberjs.com/guides/configuring-ember/disabling-prototype-extensions/).
|
2422
|
+
The alternative syntax might look like this
|
2423
|
+
(if prototype extensions are enabled, which is the default behavior):
|
2424
|
+
|
2425
|
+
```js
|
2426
|
+
fullName: function () {
|
2427
|
+
return this.get('firstName') + ' ' + this.get('lastName');
|
2428
|
+
}.property('firstName', 'lastName')
|
2284
2429
|
```
|
2285
2430
|
|
2286
|
-
@
|
2287
|
-
@
|
2288
|
-
@
|
2289
|
-
@
|
2290
|
-
@
|
2291
|
-
|
2431
|
+
@class computed
|
2432
|
+
@namespace Ember
|
2433
|
+
@constructor
|
2434
|
+
@static
|
2435
|
+
@param {String} [dependentKeys*] Optional dependent keys that trigger this computed property.
|
2436
|
+
@param {Function} func The computed property function.
|
2437
|
+
@return {Ember.ComputedProperty} property descriptor instance
|
2292
2438
|
@public
|
2293
2439
|
*/
|
2440
|
+
function computed(func) {
|
2441
|
+
var args;
|
2294
2442
|
|
2295
|
-
|
2296
|
-
|
2297
|
-
|
2298
|
-
}
|
2443
|
+
if (arguments.length > 1) {
|
2444
|
+
args = [].slice.call(arguments);
|
2445
|
+
func = args.pop();
|
2446
|
+
}
|
2447
|
+
|
2448
|
+
var cp = new ComputedProperty(func);
|
2449
|
+
|
2450
|
+
if (args) {
|
2451
|
+
cp.property.apply(cp, args);
|
2452
|
+
}
|
2453
|
+
|
2454
|
+
return cp;
|
2299
2455
|
}
|
2300
2456
|
|
2301
2457
|
/**
|
2302
|
-
|
2303
|
-
|
2304
|
-
|
2305
|
-
|
2306
|
-
|
2307
|
-
```javascript
|
2308
|
-
var Hamster = Ember.Object.extend({
|
2309
|
-
readyForCamp: Ember.computed.and('hasTent', 'hasBackpack')
|
2310
|
-
});
|
2311
|
-
|
2312
|
-
var hamster = Hamster.create();
|
2313
|
-
|
2314
|
-
hamster.get('readyForCamp'); // false
|
2315
|
-
hamster.set('hasTent', true);
|
2316
|
-
hamster.get('readyForCamp'); // false
|
2317
|
-
hamster.set('hasBackpack', true);
|
2318
|
-
hamster.get('readyForCamp'); // true
|
2319
|
-
hamster.set('hasBackpack', 'Yes');
|
2320
|
-
hamster.get('readyForCamp'); // 'Yes'
|
2321
|
-
```
|
2458
|
+
Returns the cached value for a property, if one exists.
|
2459
|
+
This can be useful for peeking at the value of a computed
|
2460
|
+
property that is generated lazily, without accidentally causing
|
2461
|
+
it to be created.
|
2322
2462
|
|
2323
|
-
@method
|
2324
|
-
@for Ember
|
2325
|
-
@param {
|
2326
|
-
@
|
2327
|
-
|
2463
|
+
@method cacheFor
|
2464
|
+
@for Ember
|
2465
|
+
@param {Object} obj the object whose property you want to check
|
2466
|
+
@param {String} key the name of the property whose cached value you want
|
2467
|
+
to return
|
2468
|
+
@return {Object} the cached value
|
2328
2469
|
@public
|
2329
2470
|
*/
|
2330
|
-
|
2331
|
-
var
|
2332
|
-
|
2333
|
-
|
2334
|
-
|
2335
|
-
|
2336
|
-
|
2471
|
+
function cacheFor(obj, key) {
|
2472
|
+
var meta = obj['__ember_meta__'];
|
2473
|
+
var cache = meta && meta.cache;
|
2474
|
+
var ret = cache && cache[key];
|
2475
|
+
|
2476
|
+
if (ret === UNDEFINED) {
|
2477
|
+
return undefined;
|
2337
2478
|
}
|
2338
|
-
return
|
2339
|
-
}
|
2479
|
+
return ret;
|
2480
|
+
}
|
2481
|
+
|
2482
|
+
cacheFor.set = function (cache, key, value) {
|
2483
|
+
if (value === undefined) {
|
2484
|
+
cache[key] = UNDEFINED;
|
2485
|
+
} else {
|
2486
|
+
cache[key] = value;
|
2487
|
+
}
|
2488
|
+
};
|
2489
|
+
|
2490
|
+
cacheFor.get = function (cache, key) {
|
2491
|
+
var ret = cache[key];
|
2492
|
+
if (ret === UNDEFINED) {
|
2493
|
+
return undefined;
|
2494
|
+
}
|
2495
|
+
return ret;
|
2496
|
+
};
|
2497
|
+
|
2498
|
+
cacheFor.remove = function (cache, key) {
|
2499
|
+
cache[key] = undefined;
|
2500
|
+
};
|
2501
|
+
|
2502
|
+
exports.ComputedProperty = ComputedProperty;
|
2503
|
+
exports.computed = computed;
|
2504
|
+
exports.cacheFor = cacheFor;
|
2505
|
+
});
|
2506
|
+
enifed("ember-metal/computed_macros", ["exports", "ember-metal/core", "ember-metal/property_get", "ember-metal/property_set", "ember-metal/computed", "ember-metal/is_empty", "ember-metal/is_none", "ember-metal/alias"], function (exports, _emberMetalCore, _emberMetalProperty_get, _emberMetalProperty_set, _emberMetalComputed, _emberMetalIs_empty, _emberMetalIs_none, _emberMetalAlias) {
|
2507
|
+
"use strict";
|
2508
|
+
|
2509
|
+
exports.empty = empty;
|
2510
|
+
exports.notEmpty = notEmpty;
|
2511
|
+
exports.none = none;
|
2512
|
+
exports.not = not;
|
2513
|
+
exports.bool = bool;
|
2514
|
+
exports.match = match;
|
2515
|
+
exports.equal = equal;
|
2516
|
+
exports.gt = gt;
|
2517
|
+
exports.gte = gte;
|
2518
|
+
exports.lt = lt;
|
2519
|
+
exports.lte = lte;
|
2520
|
+
exports.oneWay = oneWay;
|
2521
|
+
exports.readOnly = readOnly;
|
2522
|
+
exports.defaultTo = defaultTo;
|
2523
|
+
exports.deprecatingAlias = deprecatingAlias;
|
2340
2524
|
|
2341
|
-
exports.and = and;
|
2342
2525
|
/**
|
2343
|
-
|
2344
|
-
|
2345
|
-
|
2346
|
-
Example
|
2347
|
-
|
2348
|
-
```javascript
|
2349
|
-
var Hamster = Ember.Object.extend({
|
2350
|
-
readyForRain: Ember.computed.or('hasJacket', 'hasUmbrella')
|
2351
|
-
});
|
2352
|
-
|
2353
|
-
var hamster = Hamster.create();
|
2354
|
-
|
2355
|
-
hamster.get('readyForRain'); // false
|
2356
|
-
hamster.set('hasUmbrella', true);
|
2357
|
-
hamster.get('readyForRain'); // true
|
2358
|
-
hamster.set('hasJacket', 'Yes');
|
2359
|
-
hamster.get('readyForRain'); // 'Yes'
|
2360
|
-
```
|
2361
|
-
|
2362
|
-
@method or
|
2363
|
-
@for Ember.computed
|
2364
|
-
@param {String} dependentKey*
|
2365
|
-
@return {Ember.ComputedProperty} computed property which performs
|
2366
|
-
a logical `or` on the values of all the original values for properties.
|
2367
|
-
@public
|
2526
|
+
@module ember
|
2527
|
+
@submodule ember-metal
|
2368
2528
|
*/
|
2369
|
-
|
2370
|
-
|
2371
|
-
|
2372
|
-
|
2373
|
-
|
2529
|
+
|
2530
|
+
function getProperties(self, propertyNames) {
|
2531
|
+
var ret = {};
|
2532
|
+
for (var i = 0; i < propertyNames.length; i++) {
|
2533
|
+
ret[propertyNames[i]] = _emberMetalProperty_get.get(self, propertyNames[i]);
|
2374
2534
|
}
|
2375
|
-
return
|
2376
|
-
}
|
2535
|
+
return ret;
|
2536
|
+
}
|
2537
|
+
|
2538
|
+
function generateComputedWithProperties(macro) {
|
2539
|
+
return function () {
|
2540
|
+
for (var _len = arguments.length, properties = Array(_len), _key = 0; _key < _len; _key++) {
|
2541
|
+
properties[_key] = arguments[_key];
|
2542
|
+
}
|
2543
|
+
|
2544
|
+
var computedFunc = _emberMetalComputed.computed(function () {
|
2545
|
+
return macro.apply(this, [getProperties(this, properties)]);
|
2546
|
+
});
|
2547
|
+
|
2548
|
+
return computedFunc.property.apply(computedFunc, properties);
|
2549
|
+
};
|
2550
|
+
}
|
2377
2551
|
|
2378
|
-
exports.or = or;
|
2379
2552
|
/**
|
2380
|
-
A computed property that returns the
|
2381
|
-
|
2553
|
+
A computed property that returns true if the value of the dependent
|
2554
|
+
property is null, an empty string, empty array, or empty function.
|
2382
2555
|
|
2383
2556
|
Example
|
2384
2557
|
|
2385
2558
|
```javascript
|
2386
|
-
var
|
2387
|
-
|
2559
|
+
var ToDoList = Ember.Object.extend({
|
2560
|
+
isDone: Ember.computed.empty('todos')
|
2388
2561
|
});
|
2389
2562
|
|
2390
|
-
var
|
2563
|
+
var todoList = ToDoList.create({
|
2564
|
+
todos: ['Unit Test', 'Documentation', 'Release']
|
2565
|
+
});
|
2391
2566
|
|
2392
|
-
|
2393
|
-
|
2394
|
-
|
2567
|
+
todoList.get('isDone'); // false
|
2568
|
+
todoList.get('todos').clear();
|
2569
|
+
todoList.get('isDone'); // true
|
2395
2570
|
```
|
2396
2571
|
|
2397
|
-
@
|
2572
|
+
@since 1.6.0
|
2573
|
+
@method empty
|
2398
2574
|
@for Ember.computed
|
2399
|
-
@param {String} dependentKey
|
2400
|
-
@return {Ember.ComputedProperty} computed property which
|
2401
|
-
the
|
2402
|
-
@deprecated Use `Ember.computed.or` instead.
|
2575
|
+
@param {String} dependentKey
|
2576
|
+
@return {Ember.ComputedProperty} computed property which negate
|
2577
|
+
the original value for property
|
2403
2578
|
@public
|
2404
2579
|
*/
|
2405
|
-
var any = generateComputedWithProperties(function (properties) {
|
2406
|
-
_emberMetalCore["default"].deprecate('Usage of Ember.computed.any is deprecated, use `Ember.computed.or` instead.');
|
2407
|
-
for (var key in properties) {
|
2408
|
-
if (properties.hasOwnProperty(key) && properties[key]) {
|
2409
|
-
return properties[key];
|
2410
|
-
}
|
2411
|
-
}
|
2412
|
-
return null;
|
2413
|
-
});
|
2414
2580
|
|
2415
|
-
|
2581
|
+
function empty(dependentKey) {
|
2582
|
+
return _emberMetalComputed.computed(dependentKey + '.length', function () {
|
2583
|
+
return _emberMetalIs_empty["default"](_emberMetalProperty_get.get(this, dependentKey));
|
2584
|
+
});
|
2585
|
+
}
|
2586
|
+
|
2416
2587
|
/**
|
2417
|
-
A computed property that returns the
|
2418
|
-
|
2588
|
+
A computed property that returns true if the value of the dependent
|
2589
|
+
property is NOT null, an empty string, empty array, or empty function.
|
2419
2590
|
|
2420
2591
|
Example
|
2421
2592
|
|
2422
2593
|
```javascript
|
2423
2594
|
var Hamster = Ember.Object.extend({
|
2424
|
-
|
2595
|
+
hasStuff: Ember.computed.notEmpty('backpack')
|
2425
2596
|
});
|
2426
2597
|
|
2427
|
-
var hamster = Hamster.create();
|
2598
|
+
var hamster = Hamster.create({ backpack: ['Food', 'Sleeping Bag', 'Tent'] });
|
2428
2599
|
|
2429
|
-
hamster.get('
|
2430
|
-
hamster.
|
2431
|
-
hamster.
|
2432
|
-
hamster.get('clothes'); // ['Camp Hat', 'Camp Shirt']
|
2600
|
+
hamster.get('hasStuff'); // true
|
2601
|
+
hamster.get('backpack').clear(); // []
|
2602
|
+
hamster.get('hasStuff'); // false
|
2433
2603
|
```
|
2434
2604
|
|
2435
|
-
@method
|
2605
|
+
@method notEmpty
|
2436
2606
|
@for Ember.computed
|
2437
|
-
@param {String} dependentKey
|
2438
|
-
@return {Ember.ComputedProperty} computed property which
|
2439
|
-
|
2607
|
+
@param {String} dependentKey
|
2608
|
+
@return {Ember.ComputedProperty} computed property which returns true if
|
2609
|
+
original value for property is not empty.
|
2440
2610
|
@public
|
2441
2611
|
*/
|
2442
|
-
var collect = generateComputedWithProperties(function (properties) {
|
2443
|
-
var res = _emberMetalCore["default"].A();
|
2444
|
-
for (var key in properties) {
|
2445
|
-
if (properties.hasOwnProperty(key)) {
|
2446
|
-
if (_emberMetalIs_none["default"](properties[key])) {
|
2447
|
-
res.push(null);
|
2448
|
-
} else {
|
2449
|
-
res.push(properties[key]);
|
2450
|
-
}
|
2451
|
-
}
|
2452
|
-
}
|
2453
|
-
return res;
|
2454
|
-
});
|
2455
2612
|
|
2456
|
-
|
2613
|
+
function notEmpty(dependentKey) {
|
2614
|
+
return _emberMetalComputed.computed(dependentKey + '.length', function () {
|
2615
|
+
return !_emberMetalIs_empty["default"](_emberMetalProperty_get.get(this, dependentKey));
|
2616
|
+
});
|
2617
|
+
}
|
2618
|
+
|
2457
2619
|
/**
|
2458
|
-
|
2459
|
-
|
2460
|
-
|
2620
|
+
A computed property that returns true if the value of the dependent
|
2621
|
+
property is null or undefined. This avoids errors from JSLint complaining
|
2622
|
+
about use of ==, which can be technically confusing.
|
2623
|
+
|
2624
|
+
Example
|
2461
2625
|
|
2462
2626
|
```javascript
|
2463
|
-
var
|
2464
|
-
|
2465
|
-
nomen: Ember.computed.alias('name')
|
2627
|
+
var Hamster = Ember.Object.extend({
|
2628
|
+
isHungry: Ember.computed.none('food')
|
2466
2629
|
});
|
2467
2630
|
|
2468
|
-
var
|
2469
|
-
|
2470
|
-
alex.get('nomen'); // 'Alex Matchneer'
|
2471
|
-
alex.get('name'); // 'Alex Matchneer'
|
2631
|
+
var hamster = Hamster.create();
|
2472
2632
|
|
2473
|
-
|
2474
|
-
|
2633
|
+
hamster.get('isHungry'); // true
|
2634
|
+
hamster.set('food', 'Banana');
|
2635
|
+
hamster.get('isHungry'); // false
|
2636
|
+
hamster.set('food', null);
|
2637
|
+
hamster.get('isHungry'); // true
|
2475
2638
|
```
|
2476
2639
|
|
2477
|
-
@method
|
2640
|
+
@method none
|
2478
2641
|
@for Ember.computed
|
2479
2642
|
@param {String} dependentKey
|
2480
|
-
@return {Ember.ComputedProperty} computed property which
|
2481
|
-
|
2643
|
+
@return {Ember.ComputedProperty} computed property which
|
2644
|
+
returns true if original value for property is null or undefined.
|
2482
2645
|
@public
|
2483
2646
|
*/
|
2484
2647
|
|
2648
|
+
function none(dependentKey) {
|
2649
|
+
return _emberMetalComputed.computed(dependentKey, function () {
|
2650
|
+
return _emberMetalIs_none["default"](_emberMetalProperty_get.get(this, dependentKey));
|
2651
|
+
});
|
2652
|
+
}
|
2653
|
+
|
2485
2654
|
/**
|
2486
|
-
|
2487
|
-
|
2488
|
-
not mutate the upstream property, rather causes the current property to
|
2489
|
-
become the value set. This causes the downstream property to permanently
|
2490
|
-
diverge from the upstream property.
|
2655
|
+
A computed property that returns the inverse boolean value
|
2656
|
+
of the original value for the dependent property.
|
2491
2657
|
|
2492
2658
|
Example
|
2493
2659
|
|
2494
2660
|
```javascript
|
2495
2661
|
var User = Ember.Object.extend({
|
2496
|
-
|
2497
|
-
lastName: null,
|
2498
|
-
nickName: Ember.computed.oneWay('firstName')
|
2662
|
+
isAnonymous: Ember.computed.not('loggedIn')
|
2499
2663
|
});
|
2500
2664
|
|
2501
|
-
var
|
2502
|
-
firstName: 'Teddy',
|
2503
|
-
lastName: 'Zeenny'
|
2504
|
-
});
|
2665
|
+
var user = User.create({loggedIn: false});
|
2505
2666
|
|
2506
|
-
|
2507
|
-
|
2508
|
-
|
2667
|
+
user.get('isAnonymous'); // true
|
2668
|
+
user.set('loggedIn', true);
|
2669
|
+
user.get('isAnonymous'); // false
|
2509
2670
|
```
|
2510
2671
|
|
2511
|
-
@method
|
2672
|
+
@method not
|
2512
2673
|
@for Ember.computed
|
2513
2674
|
@param {String} dependentKey
|
2514
|
-
@return {Ember.ComputedProperty} computed property which
|
2515
|
-
|
2675
|
+
@return {Ember.ComputedProperty} computed property which returns
|
2676
|
+
inverse of the original value for property
|
2516
2677
|
@public
|
2517
2678
|
*/
|
2518
2679
|
|
2519
|
-
function
|
2520
|
-
return
|
2680
|
+
function not(dependentKey) {
|
2681
|
+
return _emberMetalComputed.computed(dependentKey, function () {
|
2682
|
+
return !_emberMetalProperty_get.get(this, dependentKey);
|
2683
|
+
});
|
2521
2684
|
}
|
2522
2685
|
|
2523
2686
|
/**
|
2524
|
-
|
2525
|
-
|
2526
|
-
|
2527
|
-
@method reads
|
2528
|
-
@for Ember.computed
|
2529
|
-
@param {String} dependentKey
|
2530
|
-
@return {Ember.ComputedProperty} computed property which creates a
|
2531
|
-
one way computed property to the original value for property.
|
2532
|
-
@public
|
2533
|
-
*/
|
2534
|
-
|
2535
|
-
/**
|
2536
|
-
Where `computed.oneWay` provides oneWay bindings, `computed.readOnly` provides
|
2537
|
-
a readOnly one way binding. Very often when using `computed.oneWay` one does
|
2538
|
-
not also want changes to propagate back up, as they will replace the value.
|
2539
|
-
|
2540
|
-
This prevents the reverse flow, and also throws an exception when it occurs.
|
2541
|
-
|
2542
|
-
Example
|
2687
|
+
A computed property that converts the provided dependent property
|
2688
|
+
into a boolean value.
|
2543
2689
|
|
2544
2690
|
```javascript
|
2545
|
-
var
|
2546
|
-
|
2547
|
-
lastName: null,
|
2548
|
-
nickName: Ember.computed.readOnly('firstName')
|
2691
|
+
var Hamster = Ember.Object.extend({
|
2692
|
+
hasBananas: Ember.computed.bool('numBananas')
|
2549
2693
|
});
|
2550
2694
|
|
2551
|
-
var
|
2552
|
-
firstName: 'Teddy',
|
2553
|
-
lastName: 'Zeenny'
|
2554
|
-
});
|
2695
|
+
var hamster = Hamster.create();
|
2555
2696
|
|
2556
|
-
|
2557
|
-
|
2558
|
-
|
2559
|
-
|
2697
|
+
hamster.get('hasBananas'); // false
|
2698
|
+
hamster.set('numBananas', 0);
|
2699
|
+
hamster.get('hasBananas'); // false
|
2700
|
+
hamster.set('numBananas', 1);
|
2701
|
+
hamster.get('hasBananas'); // true
|
2702
|
+
hamster.set('numBananas', null);
|
2703
|
+
hamster.get('hasBananas'); // false
|
2560
2704
|
```
|
2561
2705
|
|
2562
|
-
@method
|
2706
|
+
@method bool
|
2563
2707
|
@for Ember.computed
|
2564
2708
|
@param {String} dependentKey
|
2565
|
-
@return {Ember.ComputedProperty} computed property which
|
2566
|
-
|
2567
|
-
@since 1.5.0
|
2709
|
+
@return {Ember.ComputedProperty} computed property which converts
|
2710
|
+
to boolean the original value for property
|
2568
2711
|
@public
|
2569
2712
|
*/
|
2570
2713
|
|
2571
|
-
function
|
2572
|
-
return
|
2714
|
+
function bool(dependentKey) {
|
2715
|
+
return _emberMetalComputed.computed(dependentKey, function () {
|
2716
|
+
return !!_emberMetalProperty_get.get(this, dependentKey);
|
2717
|
+
});
|
2573
2718
|
}
|
2574
2719
|
|
2575
2720
|
/**
|
2576
|
-
A computed property
|
2577
|
-
|
2578
|
-
|
2721
|
+
A computed property which matches the original value for the
|
2722
|
+
dependent property against a given RegExp, returning `true`
|
2723
|
+
if they values matches the RegExp and `false` if it does not.
|
2579
2724
|
|
2580
2725
|
Example
|
2581
2726
|
|
2582
2727
|
```javascript
|
2583
|
-
var
|
2584
|
-
|
2728
|
+
var User = Ember.Object.extend({
|
2729
|
+
hasValidEmail: Ember.computed.match('email', /^.+@.+\..+$/)
|
2585
2730
|
});
|
2586
2731
|
|
2587
|
-
var
|
2732
|
+
var user = User.create({loggedIn: false});
|
2588
2733
|
|
2589
|
-
|
2590
|
-
|
2591
|
-
|
2592
|
-
|
2734
|
+
user.get('hasValidEmail'); // false
|
2735
|
+
user.set('email', '');
|
2736
|
+
user.get('hasValidEmail'); // false
|
2737
|
+
user.set('email', 'ember_hamster@example.com');
|
2738
|
+
user.get('hasValidEmail'); // true
|
2593
2739
|
```
|
2594
2740
|
|
2595
|
-
@method
|
2741
|
+
@method match
|
2596
2742
|
@for Ember.computed
|
2597
|
-
@param {String}
|
2598
|
-
@
|
2599
|
-
|
2600
|
-
|
2743
|
+
@param {String} dependentKey
|
2744
|
+
@param {RegExp} regexp
|
2745
|
+
@return {Ember.ComputedProperty} computed property which match
|
2746
|
+
the original value for property against a given RegExp
|
2601
2747
|
@public
|
2602
2748
|
*/
|
2603
2749
|
|
2604
|
-
function
|
2605
|
-
return _emberMetalComputed.computed({
|
2606
|
-
|
2607
|
-
_emberMetalCore["default"].deprecate('Usage of Ember.computed.defaultTo is deprecated, use `Ember.computed.oneWay` instead.');
|
2608
|
-
return _emberMetalProperty_get.get(this, defaultPath);
|
2609
|
-
},
|
2750
|
+
function match(dependentKey, regexp) {
|
2751
|
+
return _emberMetalComputed.computed(dependentKey, function () {
|
2752
|
+
var value = _emberMetalProperty_get.get(this, dependentKey);
|
2610
2753
|
|
2611
|
-
|
2612
|
-
_emberMetalCore["default"].deprecate('Usage of Ember.computed.defaultTo is deprecated, use `Ember.computed.oneWay` instead.');
|
2613
|
-
return newValue != null ? newValue : _emberMetalProperty_get.get(this, defaultPath);
|
2614
|
-
}
|
2754
|
+
return typeof value === 'string' ? regexp.test(value) : false;
|
2615
2755
|
});
|
2616
2756
|
}
|
2617
2757
|
|
2618
2758
|
/**
|
2619
|
-
|
2620
|
-
|
2621
|
-
though they were called on the original property, but also
|
2622
|
-
print a deprecation warning.
|
2759
|
+
A computed property that returns true if the provided dependent property
|
2760
|
+
is equal to the given value.
|
2623
2761
|
|
2624
|
-
|
2762
|
+
Example
|
2763
|
+
|
2764
|
+
```javascript
|
2765
|
+
var Hamster = Ember.Object.extend({
|
2766
|
+
napTime: Ember.computed.equal('state', 'sleepy')
|
2767
|
+
});
|
2768
|
+
|
2769
|
+
var hamster = Hamster.create();
|
2770
|
+
|
2771
|
+
hamster.get('napTime'); // false
|
2772
|
+
hamster.set('state', 'sleepy');
|
2773
|
+
hamster.get('napTime'); // true
|
2774
|
+
hamster.set('state', 'hungry');
|
2775
|
+
hamster.get('napTime'); // false
|
2776
|
+
```
|
2777
|
+
|
2778
|
+
@method equal
|
2625
2779
|
@for Ember.computed
|
2626
2780
|
@param {String} dependentKey
|
2627
|
-
@
|
2628
|
-
|
2629
|
-
|
2781
|
+
@param {String|Number|Object} value
|
2782
|
+
@return {Ember.ComputedProperty} computed property which returns true if
|
2783
|
+
the original value for property is equal to the given value.
|
2630
2784
|
@public
|
2631
2785
|
*/
|
2632
2786
|
|
2633
|
-
function
|
2634
|
-
return _emberMetalComputed.computed(dependentKey, {
|
2635
|
-
get
|
2636
|
-
_emberMetalCore["default"].deprecate("Usage of `" + key + "` is deprecated, use `" + dependentKey + "` instead.");
|
2637
|
-
return _emberMetalProperty_get.get(this, dependentKey);
|
2638
|
-
},
|
2639
|
-
set: function (key, value) {
|
2640
|
-
_emberMetalCore["default"].deprecate("Usage of `" + key + "` is deprecated, use `" + dependentKey + "` instead.");
|
2641
|
-
_emberMetalProperty_set.set(this, dependentKey, value);
|
2642
|
-
return value;
|
2643
|
-
}
|
2787
|
+
function equal(dependentKey, value) {
|
2788
|
+
return _emberMetalComputed.computed(dependentKey, function () {
|
2789
|
+
return _emberMetalProperty_get.get(this, dependentKey) === value;
|
2644
2790
|
});
|
2645
2791
|
}
|
2646
|
-
});
|
2647
|
-
enifed("ember-metal/computed", ["exports", "ember-metal/core", "ember-metal/property_set", "ember-metal/utils", "ember-metal/expand_properties", "ember-metal/error", "ember-metal/properties", "ember-metal/property_events", "ember-metal/dependent_keys"], function (exports, _emberMetalCore, _emberMetalProperty_set, _emberMetalUtils, _emberMetalExpand_properties, _emberMetalError, _emberMetalProperties, _emberMetalProperty_events, _emberMetalDependent_keys) {
|
2648
|
-
"use strict";
|
2649
|
-
|
2650
|
-
/**
|
2651
|
-
@module ember
|
2652
|
-
@submodule ember-metal
|
2653
|
-
*/
|
2654
|
-
|
2655
|
-
var metaFor = _emberMetalUtils.meta;
|
2656
|
-
|
2657
|
-
function UNDEFINED() {}
|
2658
|
-
|
2659
|
-
// ..........................................................
|
2660
|
-
// COMPUTED PROPERTY
|
2661
|
-
//
|
2662
2792
|
|
2663
2793
|
/**
|
2664
|
-
A computed property
|
2665
|
-
|
2666
|
-
By default the function backing the computed property will only be called
|
2667
|
-
once and the result will be cached. You can specify various properties
|
2668
|
-
that your computed property depends on. This will force the cached
|
2669
|
-
result to be recomputed if the dependencies are modified.
|
2670
|
-
|
2671
|
-
In the following example we declare a computed property (by calling
|
2672
|
-
`.property()` on the fullName function) and setup the property
|
2673
|
-
dependencies (depending on firstName and lastName). The fullName function
|
2674
|
-
will be called once (regardless of how many times it is accessed) as long
|
2675
|
-
as its dependencies have not changed. Once firstName or lastName are updated
|
2676
|
-
any future calls (or anything bound) to fullName will incorporate the new
|
2677
|
-
values.
|
2678
|
-
|
2679
|
-
```javascript
|
2680
|
-
var Person = Ember.Object.extend({
|
2681
|
-
// these will be supplied by `create`
|
2682
|
-
firstName: null,
|
2683
|
-
lastName: null,
|
2684
|
-
|
2685
|
-
fullName: function() {
|
2686
|
-
var firstName = this.get('firstName');
|
2687
|
-
var lastName = this.get('lastName');
|
2794
|
+
A computed property that returns true if the provided dependent property
|
2795
|
+
is greater than the provided value.
|
2688
2796
|
|
2689
|
-
|
2690
|
-
}.property('firstName', 'lastName')
|
2691
|
-
});
|
2797
|
+
Example
|
2692
2798
|
|
2693
|
-
|
2694
|
-
|
2695
|
-
|
2799
|
+
```javascript
|
2800
|
+
var Hamster = Ember.Object.extend({
|
2801
|
+
hasTooManyBananas: Ember.computed.gt('numBananas', 10)
|
2696
2802
|
});
|
2697
2803
|
|
2698
|
-
|
2804
|
+
var hamster = Hamster.create();
|
2805
|
+
|
2806
|
+
hamster.get('hasTooManyBananas'); // false
|
2807
|
+
hamster.set('numBananas', 3);
|
2808
|
+
hamster.get('hasTooManyBananas'); // false
|
2809
|
+
hamster.set('numBananas', 11);
|
2810
|
+
hamster.get('hasTooManyBananas'); // true
|
2699
2811
|
```
|
2700
2812
|
|
2701
|
-
|
2702
|
-
|
2703
|
-
|
2704
|
-
|
2813
|
+
@method gt
|
2814
|
+
@for Ember.computed
|
2815
|
+
@param {String} dependentKey
|
2816
|
+
@param {Number} value
|
2817
|
+
@return {Ember.ComputedProperty} computed property which returns true if
|
2818
|
+
the original value for property is greater than given value.
|
2819
|
+
@public
|
2820
|
+
*/
|
2821
|
+
|
2822
|
+
function gt(dependentKey, value) {
|
2823
|
+
return _emberMetalComputed.computed(dependentKey, function () {
|
2824
|
+
return _emberMetalProperty_get.get(this, dependentKey) > value;
|
2825
|
+
});
|
2826
|
+
}
|
2827
|
+
|
2828
|
+
/**
|
2829
|
+
A computed property that returns true if the provided dependent property
|
2830
|
+
is greater than or equal to the provided value.
|
2831
|
+
|
2832
|
+
Example
|
2705
2833
|
|
2706
2834
|
```javascript
|
2707
|
-
var
|
2708
|
-
|
2709
|
-
|
2710
|
-
lastName: null,
|
2835
|
+
var Hamster = Ember.Object.extend({
|
2836
|
+
hasTooManyBananas: Ember.computed.gte('numBananas', 10)
|
2837
|
+
});
|
2711
2838
|
|
2712
|
-
|
2713
|
-
// getter
|
2714
|
-
if (arguments.length === 1) {
|
2715
|
-
var firstName = this.get('firstName');
|
2716
|
-
var lastName = this.get('lastName');
|
2839
|
+
var hamster = Hamster.create();
|
2717
2840
|
|
2718
|
-
|
2841
|
+
hamster.get('hasTooManyBananas'); // false
|
2842
|
+
hamster.set('numBananas', 3);
|
2843
|
+
hamster.get('hasTooManyBananas'); // false
|
2844
|
+
hamster.set('numBananas', 10);
|
2845
|
+
hamster.get('hasTooManyBananas'); // true
|
2846
|
+
```
|
2719
2847
|
|
2720
|
-
|
2721
|
-
|
2722
|
-
|
2848
|
+
@method gte
|
2849
|
+
@for Ember.computed
|
2850
|
+
@param {String} dependentKey
|
2851
|
+
@param {Number} value
|
2852
|
+
@return {Ember.ComputedProperty} computed property which returns true if
|
2853
|
+
the original value for property is greater or equal then given value.
|
2854
|
+
@public
|
2855
|
+
*/
|
2856
|
+
|
2857
|
+
function gte(dependentKey, value) {
|
2858
|
+
return _emberMetalComputed.computed(dependentKey, function () {
|
2859
|
+
return _emberMetalProperty_get.get(this, dependentKey) >= value;
|
2860
|
+
});
|
2861
|
+
}
|
2862
|
+
|
2863
|
+
/**
|
2864
|
+
A computed property that returns true if the provided dependent property
|
2865
|
+
is less than the provided value.
|
2723
2866
|
|
2724
|
-
|
2725
|
-
this.set('lastName', name[1]);
|
2867
|
+
Example
|
2726
2868
|
|
2727
|
-
|
2728
|
-
|
2729
|
-
|
2869
|
+
```javascript
|
2870
|
+
var Hamster = Ember.Object.extend({
|
2871
|
+
needsMoreBananas: Ember.computed.lt('numBananas', 3)
|
2730
2872
|
});
|
2731
2873
|
|
2732
|
-
var
|
2874
|
+
var hamster = Hamster.create();
|
2733
2875
|
|
2734
|
-
|
2735
|
-
|
2736
|
-
|
2876
|
+
hamster.get('needsMoreBananas'); // true
|
2877
|
+
hamster.set('numBananas', 3);
|
2878
|
+
hamster.get('needsMoreBananas'); // false
|
2879
|
+
hamster.set('numBananas', 2);
|
2880
|
+
hamster.get('needsMoreBananas'); // true
|
2737
2881
|
```
|
2738
2882
|
|
2739
|
-
@
|
2740
|
-
@
|
2741
|
-
@
|
2883
|
+
@method lt
|
2884
|
+
@for Ember.computed
|
2885
|
+
@param {String} dependentKey
|
2886
|
+
@param {Number} value
|
2887
|
+
@return {Ember.ComputedProperty} computed property which returns true if
|
2888
|
+
the original value for property is less then given value.
|
2742
2889
|
@public
|
2743
2890
|
*/
|
2744
|
-
function ComputedProperty(config, opts) {
|
2745
|
-
this.isDescriptor = true;
|
2746
|
-
if (typeof config === "function") {
|
2747
|
-
config.__ember_arity = config.length;
|
2748
|
-
this._getter = config;
|
2749
|
-
if (config.__ember_arity > 1) {
|
2750
|
-
_emberMetalCore["default"].deprecate("Using the same function as getter and setter is deprecated.", false, {
|
2751
|
-
url: "http://emberjs.com/deprecations/v1.x/#toc_deprecate-using-the-same-function-as-getter-and-setter-in-computed-properties"
|
2752
|
-
});
|
2753
|
-
this._setter = config;
|
2754
|
-
}
|
2755
|
-
} else {
|
2756
|
-
this._getter = config.get;
|
2757
|
-
this._setter = config.set;
|
2758
|
-
if (this._setter && this._setter.__ember_arity === undefined) {
|
2759
|
-
this._setter.__ember_arity = this._setter.length;
|
2760
|
-
}
|
2761
|
-
}
|
2762
|
-
|
2763
|
-
this._dependentKeys = undefined;
|
2764
|
-
this._suspended = undefined;
|
2765
|
-
this._meta = undefined;
|
2766
2891
|
|
2767
|
-
|
2768
|
-
|
2769
|
-
|
2770
|
-
|
2771
|
-
this._readOnly = opts && (opts.readOnly !== undefined || !!opts.readOnly) || false; // TODO: Set always to `false` once this deprecation is gone.
|
2892
|
+
function lt(dependentKey, value) {
|
2893
|
+
return _emberMetalComputed.computed(dependentKey, function () {
|
2894
|
+
return _emberMetalProperty_get.get(this, dependentKey) < value;
|
2895
|
+
});
|
2772
2896
|
}
|
2773
2897
|
|
2774
|
-
ComputedProperty.prototype = new _emberMetalProperties.Descriptor();
|
2775
|
-
|
2776
|
-
var ComputedPropertyPrototype = ComputedProperty.prototype;
|
2777
|
-
|
2778
2898
|
/**
|
2779
|
-
|
2780
|
-
|
2899
|
+
A computed property that returns true if the provided dependent property
|
2900
|
+
is less than or equal to the provided value.
|
2781
2901
|
|
2782
|
-
|
2783
|
-
the computed property will not automatically cache the return value.
|
2902
|
+
Example
|
2784
2903
|
|
2785
|
-
|
2786
|
-
|
2904
|
+
```javascript
|
2905
|
+
var Hamster = Ember.Object.extend({
|
2906
|
+
needsMoreBananas: Ember.computed.lte('numBananas', 3)
|
2907
|
+
});
|
2787
2908
|
|
2788
|
-
|
2789
|
-
|
2790
|
-
|
2791
|
-
|
2792
|
-
|
2909
|
+
var hamster = Hamster.create();
|
2910
|
+
|
2911
|
+
hamster.get('needsMoreBananas'); // true
|
2912
|
+
hamster.set('numBananas', 5);
|
2913
|
+
hamster.get('needsMoreBananas'); // false
|
2914
|
+
hamster.set('numBananas', 3);
|
2915
|
+
hamster.get('needsMoreBananas'); // true
|
2916
|
+
```
|
2917
|
+
|
2918
|
+
@method lte
|
2919
|
+
@for Ember.computed
|
2920
|
+
@param {String} dependentKey
|
2921
|
+
@param {Number} value
|
2922
|
+
@return {Ember.ComputedProperty} computed property which returns true if
|
2923
|
+
the original value for property is less or equal than given value.
|
2793
2924
|
@public
|
2794
2925
|
*/
|
2795
|
-
|
2796
|
-
|
2797
|
-
|
2798
|
-
|
2799
|
-
|
2926
|
+
|
2927
|
+
function lte(dependentKey, value) {
|
2928
|
+
return _emberMetalComputed.computed(dependentKey, function () {
|
2929
|
+
return _emberMetalProperty_get.get(this, dependentKey) <= value;
|
2930
|
+
});
|
2931
|
+
}
|
2800
2932
|
|
2801
2933
|
/**
|
2802
|
-
|
2803
|
-
|
2934
|
+
A computed property that performs a logical `and` on the
|
2935
|
+
original values for the provided dependent properties.
|
2936
|
+
|
2937
|
+
Example
|
2804
2938
|
|
2805
2939
|
```javascript
|
2806
|
-
var
|
2807
|
-
|
2808
|
-
|
2809
|
-
|
2810
|
-
|
2940
|
+
var Hamster = Ember.Object.extend({
|
2941
|
+
readyForCamp: Ember.computed.and('hasTent', 'hasBackpack')
|
2942
|
+
});
|
2943
|
+
|
2944
|
+
var hamster = Hamster.create();
|
2945
|
+
|
2946
|
+
hamster.get('readyForCamp'); // false
|
2947
|
+
hamster.set('hasTent', true);
|
2948
|
+
hamster.get('readyForCamp'); // false
|
2949
|
+
hamster.set('hasBackpack', true);
|
2950
|
+
hamster.get('readyForCamp'); // true
|
2951
|
+
hamster.set('hasBackpack', 'Yes');
|
2952
|
+
hamster.get('readyForCamp'); // 'Yes'
|
2811
2953
|
```
|
2812
2954
|
|
2813
|
-
@method
|
2814
|
-
@
|
2815
|
-
@
|
2955
|
+
@method and
|
2956
|
+
@for Ember.computed
|
2957
|
+
@param {String} dependentKey*
|
2958
|
+
@return {Ember.ComputedProperty} computed property which performs
|
2959
|
+
a logical `and` on the values of all the original values for properties.
|
2816
2960
|
@public
|
2817
2961
|
*/
|
2818
|
-
|
2819
|
-
|
2820
|
-
|
2821
|
-
|
2962
|
+
var and = generateComputedWithProperties(function (properties) {
|
2963
|
+
var value;
|
2964
|
+
for (var key in properties) {
|
2965
|
+
value = properties[key];
|
2966
|
+
if (properties.hasOwnProperty(key) && !value) {
|
2967
|
+
return false;
|
2968
|
+
}
|
2969
|
+
}
|
2970
|
+
return value;
|
2971
|
+
});
|
2822
2972
|
|
2973
|
+
exports.and = and;
|
2823
2974
|
/**
|
2824
|
-
|
2825
|
-
|
2975
|
+
A computed property which performs a logical `or` on the
|
2976
|
+
original values for the provided dependent properties.
|
2977
|
+
|
2978
|
+
Example
|
2826
2979
|
|
2827
2980
|
```javascript
|
2828
|
-
var
|
2829
|
-
|
2830
|
-
return 'guid-guid-guid';
|
2831
|
-
}.property().readOnly()
|
2981
|
+
var Hamster = Ember.Object.extend({
|
2982
|
+
readyForRain: Ember.computed.or('hasJacket', 'hasUmbrella')
|
2832
2983
|
});
|
2833
2984
|
|
2834
|
-
var
|
2985
|
+
var hamster = Hamster.create();
|
2835
2986
|
|
2836
|
-
|
2987
|
+
hamster.get('readyForRain'); // false
|
2988
|
+
hamster.set('hasUmbrella', true);
|
2989
|
+
hamster.get('readyForRain'); // true
|
2990
|
+
hamster.set('hasJacket', 'Yes');
|
2991
|
+
hamster.get('readyForRain'); // 'Yes'
|
2837
2992
|
```
|
2838
2993
|
|
2839
|
-
@method
|
2840
|
-
@
|
2841
|
-
@
|
2994
|
+
@method or
|
2995
|
+
@for Ember.computed
|
2996
|
+
@param {String} dependentKey*
|
2997
|
+
@return {Ember.ComputedProperty} computed property which performs
|
2998
|
+
a logical `or` on the values of all the original values for properties.
|
2842
2999
|
@public
|
2843
3000
|
*/
|
2844
|
-
|
2845
|
-
|
2846
|
-
|
2847
|
-
|
2848
|
-
|
2849
|
-
|
3001
|
+
var or = generateComputedWithProperties(function (properties) {
|
3002
|
+
for (var key in properties) {
|
3003
|
+
if (properties.hasOwnProperty(key) && properties[key]) {
|
3004
|
+
return properties[key];
|
3005
|
+
}
|
3006
|
+
}
|
3007
|
+
return false;
|
3008
|
+
});
|
2850
3009
|
|
3010
|
+
exports.or = or;
|
2851
3011
|
/**
|
2852
|
-
|
2853
|
-
|
3012
|
+
A computed property that returns the first truthy value
|
3013
|
+
from a list of dependent properties.
|
2854
3014
|
|
2855
|
-
|
2856
|
-
var President = Ember.Object.extend({
|
2857
|
-
fullName: computed(function() {
|
2858
|
-
return this.get('firstName') + ' ' + this.get('lastName');
|
3015
|
+
Example
|
2859
3016
|
|
2860
|
-
|
2861
|
-
|
2862
|
-
|
3017
|
+
```javascript
|
3018
|
+
var Hamster = Ember.Object.extend({
|
3019
|
+
hasClothes: Ember.computed.any('hat', 'shirt')
|
2863
3020
|
});
|
2864
3021
|
|
2865
|
-
var
|
2866
|
-
firstName: 'Barack',
|
2867
|
-
lastName: 'Obama'
|
2868
|
-
});
|
3022
|
+
var hamster = Hamster.create();
|
2869
3023
|
|
2870
|
-
|
3024
|
+
hamster.get('hasClothes'); // null
|
3025
|
+
hamster.set('shirt', 'Hawaiian Shirt');
|
3026
|
+
hamster.get('hasClothes'); // 'Hawaiian Shirt'
|
2871
3027
|
```
|
2872
3028
|
|
2873
|
-
@method
|
2874
|
-
@
|
2875
|
-
@
|
2876
|
-
@
|
3029
|
+
@method any
|
3030
|
+
@for Ember.computed
|
3031
|
+
@param {String} dependentKey*
|
3032
|
+
@return {Ember.ComputedProperty} computed property which returns
|
3033
|
+
the first truthy value of given list of properties.
|
3034
|
+
@deprecated Use `Ember.computed.or` instead.
|
2877
3035
|
@public
|
2878
3036
|
*/
|
2879
|
-
|
2880
|
-
|
2881
|
-
|
2882
|
-
|
2883
|
-
|
2884
|
-
|
2885
|
-
args.push(property);
|
2886
|
-
};
|
2887
|
-
|
2888
|
-
args = [];
|
2889
|
-
for (var i = 0, l = arguments.length; i < l; i++) {
|
2890
|
-
_emberMetalExpand_properties["default"](arguments[i], addArg);
|
3037
|
+
var any = generateComputedWithProperties(function (properties) {
|
3038
|
+
_emberMetalCore["default"].deprecate('Usage of Ember.computed.any is deprecated, use `Ember.computed.or` instead.');
|
3039
|
+
for (var key in properties) {
|
3040
|
+
if (properties.hasOwnProperty(key) && properties[key]) {
|
3041
|
+
return properties[key];
|
3042
|
+
}
|
2891
3043
|
}
|
3044
|
+
return null;
|
3045
|
+
});
|
2892
3046
|
|
2893
|
-
|
2894
|
-
return this;
|
2895
|
-
};
|
2896
|
-
|
3047
|
+
exports.any = any;
|
2897
3048
|
/**
|
2898
|
-
|
2899
|
-
|
2900
|
-
computed property functions may close over variables that are then no longer
|
2901
|
-
available for introspection.
|
3049
|
+
A computed property that returns the array of values
|
3050
|
+
for the provided dependent properties.
|
2902
3051
|
|
2903
|
-
|
3052
|
+
Example
|
2904
3053
|
|
2905
|
-
```
|
2906
|
-
|
2907
|
-
|
2908
|
-
|
2909
|
-
}.property().meta({ type: App.Person })
|
2910
|
-
```
|
3054
|
+
```javascript
|
3055
|
+
var Hamster = Ember.Object.extend({
|
3056
|
+
clothes: Ember.computed.collect('hat', 'shirt')
|
3057
|
+
});
|
2911
3058
|
|
2912
|
-
|
2913
|
-
computed property descriptor under the `_meta` key. Ember runtime
|
2914
|
-
exposes a public API for retrieving these values from classes,
|
2915
|
-
via the `metaForProperty()` function.
|
3059
|
+
var hamster = Hamster.create();
|
2916
3060
|
|
2917
|
-
|
2918
|
-
|
2919
|
-
|
3061
|
+
hamster.get('clothes'); // [null, null]
|
3062
|
+
hamster.set('hat', 'Camp Hat');
|
3063
|
+
hamster.set('shirt', 'Camp Shirt');
|
3064
|
+
hamster.get('clothes'); // ['Camp Hat', 'Camp Shirt']
|
3065
|
+
```
|
3066
|
+
|
3067
|
+
@method collect
|
3068
|
+
@for Ember.computed
|
3069
|
+
@param {String} dependentKey*
|
3070
|
+
@return {Ember.ComputedProperty} computed property which maps
|
3071
|
+
values of all passed in properties to an array.
|
2920
3072
|
@public
|
2921
3073
|
*/
|
2922
|
-
|
2923
|
-
|
2924
|
-
|
2925
|
-
|
2926
|
-
|
2927
|
-
|
2928
|
-
|
2929
|
-
|
2930
|
-
|
2931
|
-
|
2932
|
-
/* impl descriptor API */
|
2933
|
-
ComputedPropertyPrototype.didChange = function (obj, keyName) {
|
2934
|
-
// _suspended is set via a CP.set to ensure we don't clear
|
2935
|
-
// the cached value set by the setter
|
2936
|
-
if (this._cacheable && this._suspended !== obj) {
|
2937
|
-
var meta = metaFor(obj);
|
2938
|
-
if (meta.cache && meta.cache[keyName] !== undefined) {
|
2939
|
-
meta.cache[keyName] = undefined;
|
2940
|
-
_emberMetalDependent_keys.removeDependentKeys(this, obj, keyName, meta);
|
3074
|
+
var collect = generateComputedWithProperties(function (properties) {
|
3075
|
+
var res = _emberMetalCore["default"].A();
|
3076
|
+
for (var key in properties) {
|
3077
|
+
if (properties.hasOwnProperty(key)) {
|
3078
|
+
if (_emberMetalIs_none["default"](properties[key])) {
|
3079
|
+
res.push(null);
|
3080
|
+
} else {
|
3081
|
+
res.push(properties[key]);
|
3082
|
+
}
|
2941
3083
|
}
|
2942
3084
|
}
|
2943
|
-
|
2944
|
-
|
2945
|
-
function finishChains(chainNodes) {
|
2946
|
-
for (var i = 0, l = chainNodes.length; i < l; i++) {
|
2947
|
-
chainNodes[i].didChange(null);
|
2948
|
-
}
|
2949
|
-
}
|
3085
|
+
return res;
|
3086
|
+
});
|
2950
3087
|
|
3088
|
+
exports.collect = collect;
|
2951
3089
|
/**
|
2952
|
-
|
2953
|
-
|
2954
|
-
|
3090
|
+
Creates a new property that is an alias for another property
|
3091
|
+
on an object. Calls to `get` or `set` this property behave as
|
3092
|
+
though they were called on the original property.
|
2955
3093
|
|
2956
3094
|
```javascript
|
2957
3095
|
var Person = Ember.Object.extend({
|
2958
|
-
|
2959
|
-
|
2960
|
-
return this.get('firstName') + ' ' + this.get('lastName');
|
2961
|
-
}.property('firstName', 'lastName')
|
3096
|
+
name: 'Alex Matchneer',
|
3097
|
+
nomen: Ember.computed.alias('name')
|
2962
3098
|
});
|
2963
3099
|
|
3100
|
+
var alex = Person.create();
|
2964
3101
|
|
2965
|
-
|
2966
|
-
|
2967
|
-
lastName: 'Dale'
|
2968
|
-
});
|
3102
|
+
alex.get('nomen'); // 'Alex Matchneer'
|
3103
|
+
alex.get('name'); // 'Alex Matchneer'
|
2969
3104
|
|
2970
|
-
|
3105
|
+
alex.set('nomen', '@machty');
|
3106
|
+
alex.get('name'); // '@machty'
|
2971
3107
|
```
|
2972
3108
|
|
2973
|
-
@method
|
2974
|
-
@
|
2975
|
-
@
|
3109
|
+
@method alias
|
3110
|
+
@for Ember.computed
|
3111
|
+
@param {String} dependentKey
|
3112
|
+
@return {Ember.ComputedProperty} computed property which creates an
|
3113
|
+
alias to the original value for property.
|
2976
3114
|
@public
|
2977
3115
|
*/
|
2978
|
-
ComputedPropertyPrototype.get = function (obj, keyName) {
|
2979
|
-
var ret, cache, meta, chainNodes;
|
2980
|
-
if (this._cacheable) {
|
2981
|
-
meta = metaFor(obj);
|
2982
|
-
cache = meta.cache;
|
2983
|
-
|
2984
|
-
var result = cache && cache[keyName];
|
2985
|
-
|
2986
|
-
if (result === UNDEFINED) {
|
2987
|
-
return undefined;
|
2988
|
-
} else if (result !== undefined) {
|
2989
|
-
return result;
|
2990
|
-
}
|
2991
|
-
|
2992
|
-
ret = this._getter.call(obj, keyName);
|
2993
|
-
cache = meta.cache;
|
2994
|
-
if (!cache) {
|
2995
|
-
cache = meta.cache = {};
|
2996
|
-
}
|
2997
|
-
if (ret === undefined) {
|
2998
|
-
cache[keyName] = UNDEFINED;
|
2999
|
-
} else {
|
3000
|
-
cache[keyName] = ret;
|
3001
|
-
}
|
3002
|
-
|
3003
|
-
chainNodes = meta.chainWatchers && meta.chainWatchers[keyName];
|
3004
|
-
if (chainNodes) {
|
3005
|
-
finishChains(chainNodes);
|
3006
|
-
}
|
3007
|
-
_emberMetalDependent_keys.addDependentKeys(this, obj, keyName, meta);
|
3008
|
-
} else {
|
3009
|
-
ret = this._getter.call(obj, keyName);
|
3010
|
-
}
|
3011
|
-
return ret;
|
3012
|
-
};
|
3013
3116
|
|
3014
3117
|
/**
|
3015
|
-
|
3016
|
-
|
3017
|
-
|
3018
|
-
the value
|
3118
|
+
Where `computed.alias` aliases `get` and `set`, and allows for bidirectional
|
3119
|
+
data flow, `computed.oneWay` only provides an aliased `get`. The `set` will
|
3120
|
+
not mutate the upstream property, rather causes the current property to
|
3121
|
+
become the value set. This causes the downstream property to permanently
|
3122
|
+
diverge from the upstream property.
|
3019
3123
|
|
3020
|
-
|
3021
|
-
your backing function should accept either two or three arguments.
|
3124
|
+
Example
|
3022
3125
|
|
3023
3126
|
```javascript
|
3024
|
-
var
|
3025
|
-
// these will be supplied by `create`
|
3127
|
+
var User = Ember.Object.extend({
|
3026
3128
|
firstName: null,
|
3027
3129
|
lastName: null,
|
3130
|
+
nickName: Ember.computed.oneWay('firstName')
|
3131
|
+
});
|
3028
3132
|
|
3029
|
-
|
3030
|
-
|
3031
|
-
|
3032
|
-
var firstName = this.get('firstName');
|
3033
|
-
var lastName = this.get('lastName');
|
3034
|
-
|
3035
|
-
return firstName + ' ' + lastName;
|
3036
|
-
|
3037
|
-
// setter
|
3038
|
-
} else {
|
3039
|
-
var name = value.split(' ');
|
3040
|
-
|
3041
|
-
this.set('firstName', name[0]);
|
3042
|
-
this.set('lastName', name[1]);
|
3043
|
-
|
3044
|
-
return value;
|
3045
|
-
}
|
3046
|
-
}.property('firstName', 'lastName')
|
3133
|
+
var teddy = User.create({
|
3134
|
+
firstName: 'Teddy',
|
3135
|
+
lastName: 'Zeenny'
|
3047
3136
|
});
|
3048
3137
|
|
3049
|
-
|
3050
|
-
|
3051
|
-
|
3052
|
-
person.get('firstName'); // 'Peter'
|
3053
|
-
person.get('lastName'); // 'Wagenet'
|
3138
|
+
teddy.get('nickName'); // 'Teddy'
|
3139
|
+
teddy.set('nickName', 'TeddyBear'); // 'TeddyBear'
|
3140
|
+
teddy.get('firstName'); // 'Teddy'
|
3054
3141
|
```
|
3055
3142
|
|
3056
|
-
@method
|
3057
|
-
@
|
3058
|
-
@param {
|
3059
|
-
@
|
3060
|
-
|
3143
|
+
@method oneWay
|
3144
|
+
@for Ember.computed
|
3145
|
+
@param {String} dependentKey
|
3146
|
+
@return {Ember.ComputedProperty} computed property which creates a
|
3147
|
+
one way computed property to the original value for property.
|
3061
3148
|
@public
|
3062
3149
|
*/
|
3063
|
-
ComputedPropertyPrototype.set = function computedPropertySetWithSuspend(obj, keyName, value) {
|
3064
|
-
var oldSuspended = this._suspended;
|
3065
|
-
|
3066
|
-
this._suspended = obj;
|
3067
|
-
|
3068
|
-
try {
|
3069
|
-
this._set(obj, keyName, value);
|
3070
|
-
} finally {
|
3071
|
-
this._suspended = oldSuspended;
|
3072
|
-
}
|
3073
|
-
};
|
3074
|
-
|
3075
|
-
ComputedPropertyPrototype._set = function computedPropertySet(obj, keyName, value) {
|
3076
|
-
var cacheable = this._cacheable;
|
3077
|
-
var setter = this._setter;
|
3078
|
-
var meta = metaFor(obj, cacheable);
|
3079
|
-
var cache = meta.cache;
|
3080
|
-
var hadCachedValue = false;
|
3081
|
-
|
3082
|
-
var cachedValue, ret;
|
3083
|
-
|
3084
|
-
if (this._readOnly) {
|
3085
|
-
throw new _emberMetalError["default"]("Cannot set read-only property \"" + keyName + "\" on object: " + _emberMetalUtils.inspect(obj));
|
3086
|
-
}
|
3087
|
-
|
3088
|
-
if (cacheable && cache && cache[keyName] !== undefined) {
|
3089
|
-
if (cache[keyName] !== UNDEFINED) {
|
3090
|
-
cachedValue = cache[keyName];
|
3091
|
-
}
|
3092
|
-
|
3093
|
-
hadCachedValue = true;
|
3094
|
-
}
|
3095
|
-
|
3096
|
-
if (!setter) {
|
3097
|
-
_emberMetalProperties.defineProperty(obj, keyName, null, cachedValue);
|
3098
|
-
_emberMetalProperty_set.set(obj, keyName, value);
|
3099
|
-
return;
|
3100
|
-
} else if (setter.__ember_arity === 2) {
|
3101
|
-
// Is there any way of deprecate this in a sensitive way?
|
3102
|
-
// Maybe now that getters and setters are the prefered options we can....
|
3103
|
-
ret = setter.call(obj, keyName, value);
|
3104
|
-
} else {
|
3105
|
-
ret = setter.call(obj, keyName, value, cachedValue);
|
3106
|
-
}
|
3107
|
-
|
3108
|
-
if (hadCachedValue && cachedValue === ret) {
|
3109
|
-
return;
|
3110
|
-
}
|
3111
|
-
|
3112
|
-
var watched = meta.watching[keyName];
|
3113
|
-
if (watched) {
|
3114
|
-
_emberMetalProperty_events.propertyWillChange(obj, keyName);
|
3115
|
-
}
|
3116
|
-
|
3117
|
-
if (hadCachedValue) {
|
3118
|
-
cache[keyName] = undefined;
|
3119
|
-
}
|
3120
|
-
|
3121
|
-
if (cacheable) {
|
3122
|
-
if (!hadCachedValue) {
|
3123
|
-
_emberMetalDependent_keys.addDependentKeys(this, obj, keyName, meta);
|
3124
|
-
}
|
3125
|
-
if (!cache) {
|
3126
|
-
cache = meta.cache = {};
|
3127
|
-
}
|
3128
|
-
if (ret === undefined) {
|
3129
|
-
cache[keyName] = UNDEFINED;
|
3130
|
-
} else {
|
3131
|
-
cache[keyName] = ret;
|
3132
|
-
}
|
3133
|
-
}
|
3134
|
-
|
3135
|
-
if (watched) {
|
3136
|
-
_emberMetalProperty_events.propertyDidChange(obj, keyName);
|
3137
|
-
}
|
3138
|
-
|
3139
|
-
return ret;
|
3140
|
-
};
|
3141
|
-
|
3142
|
-
/* called before property is overridden */
|
3143
|
-
ComputedPropertyPrototype.teardown = function (obj, keyName) {
|
3144
|
-
var meta = metaFor(obj);
|
3145
|
-
|
3146
|
-
if (meta.cache) {
|
3147
|
-
if (keyName in meta.cache) {
|
3148
|
-
_emberMetalDependent_keys.removeDependentKeys(this, obj, keyName, meta);
|
3149
|
-
}
|
3150
3150
|
|
3151
|
-
|
3152
|
-
|
3153
|
-
|
3154
|
-
}
|
3151
|
+
function oneWay(dependentKey) {
|
3152
|
+
return _emberMetalAlias["default"](dependentKey).oneWay();
|
3153
|
+
}
|
3155
3154
|
|
3156
|
-
|
3157
|
-
|
3155
|
+
/**
|
3156
|
+
This is a more semantically meaningful alias of `computed.oneWay`,
|
3157
|
+
whose name is somewhat ambiguous as to which direction the data flows.
|
3158
|
+
|
3159
|
+
@method reads
|
3160
|
+
@for Ember.computed
|
3161
|
+
@param {String} dependentKey
|
3162
|
+
@return {Ember.ComputedProperty} computed property which creates a
|
3163
|
+
one way computed property to the original value for property.
|
3164
|
+
@public
|
3165
|
+
*/
|
3158
3166
|
|
3159
3167
|
/**
|
3160
|
-
|
3161
|
-
|
3162
|
-
|
3168
|
+
Where `computed.oneWay` provides oneWay bindings, `computed.readOnly` provides
|
3169
|
+
a readOnly one way binding. Very often when using `computed.oneWay` one does
|
3170
|
+
not also want changes to propagate back up, as they will replace the value.
|
3163
3171
|
|
3164
|
-
|
3165
|
-
The function should accept two parameters, key and value. If value is not
|
3166
|
-
undefined you should set the value first. In either case return the
|
3167
|
-
current value of the property.
|
3172
|
+
This prevents the reverse flow, and also throws an exception when it occurs.
|
3168
3173
|
|
3169
|
-
|
3174
|
+
Example
|
3170
3175
|
|
3171
|
-
```
|
3172
|
-
var
|
3173
|
-
firstName:
|
3174
|
-
lastName:
|
3176
|
+
```javascript
|
3177
|
+
var User = Ember.Object.extend({
|
3178
|
+
firstName: null,
|
3179
|
+
lastName: null,
|
3180
|
+
nickName: Ember.computed.readOnly('firstName')
|
3181
|
+
});
|
3175
3182
|
|
3176
|
-
|
3177
|
-
|
3178
|
-
|
3183
|
+
var teddy = User.create({
|
3184
|
+
firstName: 'Teddy',
|
3185
|
+
lastName: 'Zeenny'
|
3179
3186
|
});
|
3180
3187
|
|
3181
|
-
|
3188
|
+
teddy.get('nickName'); // 'Teddy'
|
3189
|
+
teddy.set('nickName', 'TeddyBear'); // throws Exception
|
3190
|
+
// throw new Ember.Error('Cannot Set: nickName on: <User:ember27288>' );`
|
3191
|
+
teddy.get('firstName'); // 'Teddy'
|
3192
|
+
```
|
3182
3193
|
|
3183
|
-
|
3194
|
+
@method readOnly
|
3195
|
+
@for Ember.computed
|
3196
|
+
@param {String} dependentKey
|
3197
|
+
@return {Ember.ComputedProperty} computed property which creates a
|
3198
|
+
one way computed property to the original value for property.
|
3199
|
+
@since 1.5.0
|
3200
|
+
@public
|
3201
|
+
*/
|
3202
|
+
|
3203
|
+
function readOnly(dependentKey) {
|
3204
|
+
return _emberMetalAlias["default"](dependentKey).readOnly();
|
3205
|
+
}
|
3206
|
+
|
3207
|
+
/**
|
3208
|
+
A computed property that acts like a standard getter and setter,
|
3209
|
+
but returns the value at the provided `defaultPath` if the
|
3210
|
+
property itself has not been set to a value
|
3184
3211
|
|
3185
|
-
|
3186
|
-
client.get('fullName'); // 'Betty Fuller'
|
3187
|
-
```
|
3212
|
+
Example
|
3188
3213
|
|
3189
|
-
|
3190
|
-
|
3191
|
-
|
3214
|
+
```javascript
|
3215
|
+
var Hamster = Ember.Object.extend({
|
3216
|
+
wishList: Ember.computed.defaultTo('favoriteFood')
|
3217
|
+
});
|
3192
3218
|
|
3193
|
-
|
3194
|
-
[Prototype Extensions](http://emberjs.com/guides/configuring-ember/disabling-prototype-extensions/).
|
3195
|
-
The alternative syntax might look like this
|
3196
|
-
(if prototype extensions are enabled, which is the default behavior):
|
3219
|
+
var hamster = Hamster.create({ favoriteFood: 'Banana' });
|
3197
3220
|
|
3198
|
-
|
3199
|
-
|
3200
|
-
|
3201
|
-
|
3221
|
+
hamster.get('wishList'); // 'Banana'
|
3222
|
+
hamster.set('wishList', 'More Unit Tests');
|
3223
|
+
hamster.get('wishList'); // 'More Unit Tests'
|
3224
|
+
hamster.get('favoriteFood'); // 'Banana'
|
3202
3225
|
```
|
3203
3226
|
|
3204
|
-
@
|
3205
|
-
@
|
3206
|
-
@
|
3207
|
-
@
|
3208
|
-
|
3209
|
-
@
|
3210
|
-
@return {Ember.ComputedProperty} property descriptor instance
|
3227
|
+
@method defaultTo
|
3228
|
+
@for Ember.computed
|
3229
|
+
@param {String} defaultPath
|
3230
|
+
@return {Ember.ComputedProperty} computed property which acts like
|
3231
|
+
a standard getter and setter, but defaults to the value from `defaultPath`.
|
3232
|
+
@deprecated Use `Ember.computed.oneWay` or custom CP with default instead.
|
3211
3233
|
@public
|
3212
3234
|
*/
|
3213
|
-
function computed(func) {
|
3214
|
-
var args;
|
3215
|
-
|
3216
|
-
if (arguments.length > 1) {
|
3217
|
-
args = [].slice.call(arguments);
|
3218
|
-
func = args.pop();
|
3219
|
-
}
|
3220
|
-
|
3221
|
-
var cp = new ComputedProperty(func);
|
3222
3235
|
|
3223
|
-
|
3224
|
-
|
3225
|
-
|
3236
|
+
function defaultTo(defaultPath) {
|
3237
|
+
return _emberMetalComputed.computed({
|
3238
|
+
get: function (key) {
|
3239
|
+
_emberMetalCore["default"].deprecate('Usage of Ember.computed.defaultTo is deprecated, use `Ember.computed.oneWay` instead.');
|
3240
|
+
return _emberMetalProperty_get.get(this, defaultPath);
|
3241
|
+
},
|
3226
3242
|
|
3227
|
-
|
3243
|
+
set: function (key, newValue, cachedValue) {
|
3244
|
+
_emberMetalCore["default"].deprecate('Usage of Ember.computed.defaultTo is deprecated, use `Ember.computed.oneWay` instead.');
|
3245
|
+
return newValue != null ? newValue : _emberMetalProperty_get.get(this, defaultPath);
|
3246
|
+
}
|
3247
|
+
});
|
3228
3248
|
}
|
3229
3249
|
|
3230
3250
|
/**
|
3231
|
-
|
3232
|
-
|
3233
|
-
|
3234
|
-
|
3251
|
+
Creates a new property that is an alias for another property
|
3252
|
+
on an object. Calls to `get` or `set` this property behave as
|
3253
|
+
though they were called on the original property, but also
|
3254
|
+
print a deprecation warning.
|
3235
3255
|
|
3236
|
-
@method
|
3237
|
-
@for Ember
|
3238
|
-
@param {
|
3239
|
-
@
|
3240
|
-
|
3241
|
-
@
|
3256
|
+
@method deprecatingAlias
|
3257
|
+
@for Ember.computed
|
3258
|
+
@param {String} dependentKey
|
3259
|
+
@return {Ember.ComputedProperty} computed property which creates an
|
3260
|
+
alias with a deprecation to the original value for property.
|
3261
|
+
@since 1.7.0
|
3242
3262
|
@public
|
3243
3263
|
*/
|
3244
|
-
function cacheFor(obj, key) {
|
3245
|
-
var meta = obj['__ember_meta__'];
|
3246
|
-
var cache = meta && meta.cache;
|
3247
|
-
var ret = cache && cache[key];
|
3248
3264
|
|
3249
|
-
|
3250
|
-
|
3251
|
-
|
3252
|
-
|
3265
|
+
function deprecatingAlias(dependentKey) {
|
3266
|
+
return _emberMetalComputed.computed(dependentKey, {
|
3267
|
+
get: function (key) {
|
3268
|
+
_emberMetalCore["default"].deprecate("Usage of `" + key + "` is deprecated, use `" + dependentKey + "` instead.");
|
3269
|
+
return _emberMetalProperty_get.get(this, dependentKey);
|
3270
|
+
},
|
3271
|
+
set: function (key, value) {
|
3272
|
+
_emberMetalCore["default"].deprecate("Usage of `" + key + "` is deprecated, use `" + dependentKey + "` instead.");
|
3273
|
+
_emberMetalProperty_set.set(this, dependentKey, value);
|
3274
|
+
return value;
|
3275
|
+
}
|
3276
|
+
});
|
3253
3277
|
}
|
3254
|
-
|
3255
|
-
cacheFor.set = function (cache, key, value) {
|
3256
|
-
if (value === undefined) {
|
3257
|
-
cache[key] = UNDEFINED;
|
3258
|
-
} else {
|
3259
|
-
cache[key] = value;
|
3260
|
-
}
|
3261
|
-
};
|
3262
|
-
|
3263
|
-
cacheFor.get = function (cache, key) {
|
3264
|
-
var ret = cache[key];
|
3265
|
-
if (ret === UNDEFINED) {
|
3266
|
-
return undefined;
|
3267
|
-
}
|
3268
|
-
return ret;
|
3269
|
-
};
|
3270
|
-
|
3271
|
-
cacheFor.remove = function (cache, key) {
|
3272
|
-
cache[key] = undefined;
|
3273
|
-
};
|
3274
|
-
|
3275
|
-
exports.ComputedProperty = ComputedProperty;
|
3276
|
-
exports.computed = computed;
|
3277
|
-
exports.cacheFor = cacheFor;
|
3278
3278
|
});
|
3279
3279
|
enifed('ember-metal/core', ['exports'], function (exports) {
|
3280
3280
|
/*globals Ember:true,ENV,EmberENV */
|
@@ -3299,7 +3299,7 @@ enifed('ember-metal/core', ['exports'], function (exports) {
|
|
3299
3299
|
|
3300
3300
|
@class Ember
|
3301
3301
|
@static
|
3302
|
-
@version 1.13.
|
3302
|
+
@version 1.13.13
|
3303
3303
|
@public
|
3304
3304
|
*/
|
3305
3305
|
|
@@ -3333,11 +3333,11 @@ enifed('ember-metal/core', ['exports'], function (exports) {
|
|
3333
3333
|
|
3334
3334
|
@property VERSION
|
3335
3335
|
@type String
|
3336
|
-
@default '1.13.
|
3336
|
+
@default '1.13.13'
|
3337
3337
|
@static
|
3338
3338
|
@public
|
3339
3339
|
*/
|
3340
|
-
Ember.VERSION = '1.13.
|
3340
|
+
Ember.VERSION = '1.13.13';
|
3341
3341
|
|
3342
3342
|
/**
|
3343
3343
|
The hash of environment variables used to control various configuration
|
@@ -6980,75 +6980,6 @@ enifed("ember-metal/mixin", ["exports", "ember-metal/core", "ember-metal/merge",
|
|
6980
6980
|
exports.REQUIRED = REQUIRED;
|
6981
6981
|
});
|
6982
6982
|
// warn, assert, wrap, et;
|
6983
|
-
enifed("ember-metal/observer_set", ["exports", "ember-metal/utils", "ember-metal/events"], function (exports, _emberMetalUtils, _emberMetalEvents) {
|
6984
|
-
"use strict";
|
6985
|
-
|
6986
|
-
/*
|
6987
|
-
this.observerSet = {
|
6988
|
-
[senderGuid]: { // variable name: `keySet`
|
6989
|
-
[keyName]: listIndex
|
6990
|
-
}
|
6991
|
-
},
|
6992
|
-
this.observers = [
|
6993
|
-
{
|
6994
|
-
sender: obj,
|
6995
|
-
keyName: keyName,
|
6996
|
-
eventName: eventName,
|
6997
|
-
listeners: [
|
6998
|
-
[target, method, flags]
|
6999
|
-
]
|
7000
|
-
},
|
7001
|
-
...
|
7002
|
-
]
|
7003
|
-
*/
|
7004
|
-
exports["default"] = ObserverSet;
|
7005
|
-
|
7006
|
-
function ObserverSet() {
|
7007
|
-
this.clear();
|
7008
|
-
}
|
7009
|
-
|
7010
|
-
ObserverSet.prototype.add = function (sender, keyName, eventName) {
|
7011
|
-
var observerSet = this.observerSet;
|
7012
|
-
var observers = this.observers;
|
7013
|
-
var senderGuid = _emberMetalUtils.guidFor(sender);
|
7014
|
-
var keySet = observerSet[senderGuid];
|
7015
|
-
var index;
|
7016
|
-
|
7017
|
-
if (!keySet) {
|
7018
|
-
observerSet[senderGuid] = keySet = {};
|
7019
|
-
}
|
7020
|
-
index = keySet[keyName];
|
7021
|
-
if (index === undefined) {
|
7022
|
-
index = observers.push({
|
7023
|
-
sender: sender,
|
7024
|
-
keyName: keyName,
|
7025
|
-
eventName: eventName,
|
7026
|
-
listeners: []
|
7027
|
-
}) - 1;
|
7028
|
-
keySet[keyName] = index;
|
7029
|
-
}
|
7030
|
-
return observers[index].listeners;
|
7031
|
-
};
|
7032
|
-
|
7033
|
-
ObserverSet.prototype.flush = function () {
|
7034
|
-
var observers = this.observers;
|
7035
|
-
var i, len, observer, sender;
|
7036
|
-
this.clear();
|
7037
|
-
for (i = 0, len = observers.length; i < len; ++i) {
|
7038
|
-
observer = observers[i];
|
7039
|
-
sender = observer.sender;
|
7040
|
-
if (sender.isDestroying || sender.isDestroyed) {
|
7041
|
-
continue;
|
7042
|
-
}
|
7043
|
-
_emberMetalEvents.sendEvent(sender, observer.eventName, [sender, observer.keyName], observer.listeners);
|
7044
|
-
}
|
7045
|
-
};
|
7046
|
-
|
7047
|
-
ObserverSet.prototype.clear = function () {
|
7048
|
-
this.observerSet = {};
|
7049
|
-
this.observers = [];
|
7050
|
-
};
|
7051
|
-
});
|
7052
6983
|
enifed("ember-metal/observer", ["exports", "ember-metal/watching", "ember-metal/array", "ember-metal/events"], function (exports, _emberMetalWatching, _emberMetalArray, _emberMetalEvents) {
|
7053
6984
|
"use strict";
|
7054
6985
|
|
@@ -7179,6 +7110,75 @@ enifed("ember-metal/observer", ["exports", "ember-metal/watching", "ember-metal/
|
|
7179
7110
|
return this;
|
7180
7111
|
}
|
7181
7112
|
});
|
7113
|
+
enifed("ember-metal/observer_set", ["exports", "ember-metal/utils", "ember-metal/events"], function (exports, _emberMetalUtils, _emberMetalEvents) {
|
7114
|
+
"use strict";
|
7115
|
+
|
7116
|
+
/*
|
7117
|
+
this.observerSet = {
|
7118
|
+
[senderGuid]: { // variable name: `keySet`
|
7119
|
+
[keyName]: listIndex
|
7120
|
+
}
|
7121
|
+
},
|
7122
|
+
this.observers = [
|
7123
|
+
{
|
7124
|
+
sender: obj,
|
7125
|
+
keyName: keyName,
|
7126
|
+
eventName: eventName,
|
7127
|
+
listeners: [
|
7128
|
+
[target, method, flags]
|
7129
|
+
]
|
7130
|
+
},
|
7131
|
+
...
|
7132
|
+
]
|
7133
|
+
*/
|
7134
|
+
exports["default"] = ObserverSet;
|
7135
|
+
|
7136
|
+
function ObserverSet() {
|
7137
|
+
this.clear();
|
7138
|
+
}
|
7139
|
+
|
7140
|
+
ObserverSet.prototype.add = function (sender, keyName, eventName) {
|
7141
|
+
var observerSet = this.observerSet;
|
7142
|
+
var observers = this.observers;
|
7143
|
+
var senderGuid = _emberMetalUtils.guidFor(sender);
|
7144
|
+
var keySet = observerSet[senderGuid];
|
7145
|
+
var index;
|
7146
|
+
|
7147
|
+
if (!keySet) {
|
7148
|
+
observerSet[senderGuid] = keySet = {};
|
7149
|
+
}
|
7150
|
+
index = keySet[keyName];
|
7151
|
+
if (index === undefined) {
|
7152
|
+
index = observers.push({
|
7153
|
+
sender: sender,
|
7154
|
+
keyName: keyName,
|
7155
|
+
eventName: eventName,
|
7156
|
+
listeners: []
|
7157
|
+
}) - 1;
|
7158
|
+
keySet[keyName] = index;
|
7159
|
+
}
|
7160
|
+
return observers[index].listeners;
|
7161
|
+
};
|
7162
|
+
|
7163
|
+
ObserverSet.prototype.flush = function () {
|
7164
|
+
var observers = this.observers;
|
7165
|
+
var i, len, observer, sender;
|
7166
|
+
this.clear();
|
7167
|
+
for (i = 0, len = observers.length; i < len; ++i) {
|
7168
|
+
observer = observers[i];
|
7169
|
+
sender = observer.sender;
|
7170
|
+
if (sender.isDestroying || sender.isDestroyed) {
|
7171
|
+
continue;
|
7172
|
+
}
|
7173
|
+
_emberMetalEvents.sendEvent(sender, observer.eventName, [sender, observer.keyName], observer.listeners);
|
7174
|
+
}
|
7175
|
+
};
|
7176
|
+
|
7177
|
+
ObserverSet.prototype.clear = function () {
|
7178
|
+
this.observerSet = {};
|
7179
|
+
this.observers = [];
|
7180
|
+
};
|
7181
|
+
});
|
7182
7182
|
enifed('ember-metal/path_cache', ['exports', 'ember-metal/cache'], function (exports, _emberMetalCache) {
|
7183
7183
|
'use strict';
|
7184
7184
|
|
@@ -12589,6 +12589,41 @@ enifed('ember-template-compiler/system/calculate-location-display', ['exports'],
|
|
12589
12589
|
return moduleInfo;
|
12590
12590
|
}
|
12591
12591
|
});
|
12592
|
+
enifed("ember-template-compiler/system/compile", ["exports", "ember-template-compiler/system/compile_options", "ember-template-compiler/system/template"], function (exports, _emberTemplateCompilerSystemCompile_options, _emberTemplateCompilerSystemTemplate) {
|
12593
|
+
/**
|
12594
|
+
@module ember
|
12595
|
+
@submodule ember-template-compiler
|
12596
|
+
*/
|
12597
|
+
|
12598
|
+
"use strict";
|
12599
|
+
|
12600
|
+
var compile;
|
12601
|
+
|
12602
|
+
/**
|
12603
|
+
Uses HTMLBars `compile` function to process a string into a compiled template.
|
12604
|
+
|
12605
|
+
This is not present in production builds.
|
12606
|
+
|
12607
|
+
@private
|
12608
|
+
@method compile
|
12609
|
+
@param {String} templateString This is the string to be compiled by HTMLBars.
|
12610
|
+
@param {Object} options This is an options hash to augment the compiler options.
|
12611
|
+
*/
|
12612
|
+
|
12613
|
+
exports["default"] = function (templateString, options) {
|
12614
|
+
if (!compile && Ember.__loader.registry['htmlbars-compiler/compiler']) {
|
12615
|
+
compile = requireModule('htmlbars-compiler/compiler').compile;
|
12616
|
+
}
|
12617
|
+
|
12618
|
+
if (!compile) {
|
12619
|
+
throw new Error('Cannot call `compile` without the template compiler loaded. Please load `ember-template-compiler.js` prior to calling `compile`.');
|
12620
|
+
}
|
12621
|
+
|
12622
|
+
var templateSpec = compile(templateString, _emberTemplateCompilerSystemCompile_options["default"](options));
|
12623
|
+
|
12624
|
+
return _emberTemplateCompilerSystemTemplate["default"](templateSpec);
|
12625
|
+
};
|
12626
|
+
});
|
12592
12627
|
enifed("ember-template-compiler/system/compile_options", ["exports", "ember-metal/core", "ember-metal/merge", "ember-template-compiler/plugins"], function (exports, _emberMetalCore, _emberMetalMerge, _emberTemplateCompilerPlugins) {
|
12593
12628
|
/**
|
12594
12629
|
@module ember
|
@@ -12628,7 +12663,7 @@ enifed("ember-template-compiler/system/compile_options", ["exports", "ember-meta
|
|
12628
12663
|
|
12629
12664
|
options.buildMeta = function buildMeta(program) {
|
12630
12665
|
return {
|
12631
|
-
revision: 'Ember@1.13.
|
12666
|
+
revision: 'Ember@1.13.13',
|
12632
12667
|
loc: program.loc,
|
12633
12668
|
moduleName: options.moduleName
|
12634
12669
|
};
|
@@ -12637,41 +12672,6 @@ enifed("ember-template-compiler/system/compile_options", ["exports", "ember-meta
|
|
12637
12672
|
return options;
|
12638
12673
|
};
|
12639
12674
|
});
|
12640
|
-
enifed("ember-template-compiler/system/compile", ["exports", "ember-template-compiler/system/compile_options", "ember-template-compiler/system/template"], function (exports, _emberTemplateCompilerSystemCompile_options, _emberTemplateCompilerSystemTemplate) {
|
12641
|
-
/**
|
12642
|
-
@module ember
|
12643
|
-
@submodule ember-template-compiler
|
12644
|
-
*/
|
12645
|
-
|
12646
|
-
"use strict";
|
12647
|
-
|
12648
|
-
var compile;
|
12649
|
-
|
12650
|
-
/**
|
12651
|
-
Uses HTMLBars `compile` function to process a string into a compiled template.
|
12652
|
-
|
12653
|
-
This is not present in production builds.
|
12654
|
-
|
12655
|
-
@private
|
12656
|
-
@method compile
|
12657
|
-
@param {String} templateString This is the string to be compiled by HTMLBars.
|
12658
|
-
@param {Object} options This is an options hash to augment the compiler options.
|
12659
|
-
*/
|
12660
|
-
|
12661
|
-
exports["default"] = function (templateString, options) {
|
12662
|
-
if (!compile && Ember.__loader.registry['htmlbars-compiler/compiler']) {
|
12663
|
-
compile = requireModule('htmlbars-compiler/compiler').compile;
|
12664
|
-
}
|
12665
|
-
|
12666
|
-
if (!compile) {
|
12667
|
-
throw new Error('Cannot call `compile` without the template compiler loaded. Please load `ember-template-compiler.js` prior to calling `compile`.');
|
12668
|
-
}
|
12669
|
-
|
12670
|
-
var templateSpec = compile(templateString, _emberTemplateCompilerSystemCompile_options["default"](options));
|
12671
|
-
|
12672
|
-
return _emberTemplateCompilerSystemTemplate["default"](templateSpec);
|
12673
|
-
};
|
12674
|
-
});
|
12675
12675
|
enifed('ember-template-compiler/system/precompile', ['exports', 'ember-template-compiler/system/compile_options'], function (exports, _emberTemplateCompilerSystemCompile_options) {
|
12676
12676
|
/**
|
12677
12677
|
@module ember
|
@@ -14484,7 +14484,7 @@ enifed("htmlbars-runtime/hooks", ["exports", "./render", "../morph-range/morph-l
|
|
14484
14484
|
return {
|
14485
14485
|
meta: template.meta,
|
14486
14486
|
arity: template.arity,
|
14487
|
-
yield: yieldArgs,
|
14487
|
+
"yield": yieldArgs,
|
14488
14488
|
yieldItem: yieldItem(template, env, scope, morph, renderState, visitor),
|
14489
14489
|
yieldIn: yieldInShadowTemplate(template, env, scope, morph, renderState, visitor),
|
14490
14490
|
raw: template,
|
@@ -14720,7 +14720,7 @@ enifed("htmlbars-runtime/hooks", ["exports", "./render", "../morph-range/morph-l
|
|
14720
14720
|
function thisFor(options) {
|
14721
14721
|
return {
|
14722
14722
|
arity: options.template.arity,
|
14723
|
-
yield: options.template
|
14723
|
+
"yield": options.template["yield"],
|
14724
14724
|
yieldItem: options.template.yieldItem,
|
14725
14725
|
yieldIn: options.template.yieldIn
|
14726
14726
|
};
|
@@ -15207,7 +15207,7 @@ enifed("htmlbars-runtime/hooks", ["exports", "./render", "../morph-range/morph-l
|
|
15207
15207
|
return true;
|
15208
15208
|
},
|
15209
15209
|
|
15210
|
-
yield: function (morph, env, scope, params, hash, template, inverse, visitor) {
|
15210
|
+
"yield": function (morph, env, scope, params, hash, template, inverse, visitor) {
|
15211
15211
|
// the current scope is provided purely for the creation of shadow
|
15212
15212
|
// scopes; it should not be provided to user code.
|
15213
15213
|
|