diff --git a/0000-improved-cp-syntax.md b/0000-improved-cp-syntax.md new file mode 100644 index 0000000000..4c5f4549c3 --- /dev/null +++ b/0000-improved-cp-syntax.md @@ -0,0 +1,82 @@ +- Start Date: 2014-19-30 +- RFC PR: (leave this empty) +- Ember Issue: (leave this empty) + +# Summary + +Improve computed property syntax + +# Motivation + +Today, the setter variant of CP's is both confusing, and looks scary as sin. +(To many concepts must be taught and it is to easy to screw it up.) + +# Detailed design + +today: +------ + +```js +fullName: Ember.computed('firstName', 'lastName', function(key, value) { + if (arguments.length > 1) { + var names = value.split(' '); + this.setProperties({ + firstName: names[0], + lastName: names[1] + }); + return value; + } + + return this.get('firstName') + ' ' + this.get('lastName'); +}); +``` + +Tomorrow: +--------- + +```js +fullName: Ember.computed('firstName', 'lastName', { + get(keyName) { + return this.get('firstName') + ' ' + this.get('lastName'); + }, + + set(keyName, fullName) { + var names = fullName.split(' '); + + this.setProperties({ + firstName: names[0], + lastName: names[1] + }); + + return fullName; + } +}); +``` + + +Notes: +------ + +* we should likely keep `Ember.computed(fn);` as shorthand for getter only +Migration: +* Also, `get` xor `set` variants would also be possible. +* `{ get() { } }` is es6 syntax for `{ get: function() { } )` + +Migration +--------- + +* 1.x support both, detect new behaviour by testing if the last arg is not null and typeof object +* 1.x+1 deprecate if last arg is a function and its arity is greater then 1 + + +# Drawbacks + +N/A + +# Alternatives + +N/A + +# Unresolved questions + +* do setters with the new syntax get the 3rd arg of `oldValue` provided?