Skip to content

Commit

Permalink
Merge pull request #11 from stefanpenner/cp-improved
Browse files Browse the repository at this point in the history
RFC: Improved CP Syntax
  • Loading branch information
tomdale committed Nov 2, 2014
2 parents cf9b423 + ae07e7b commit d75bdff
Showing 1 changed file with 81 additions and 0 deletions.
81 changes: 81 additions & 0 deletions 0000-improved-cp-syntax.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
- 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: function(keyName) {
return this.get('firstName') + ' ' + this.get('lastName');
},

set: function(keyName, fullName, oldValue) {
var names = fullName.split(' ');

this.setProperties({
firstName: names[0],
lastName: names[1]
});

return fullName;
}
});
```


Notes:
------

* we should keep `Ember.computed(fn);` as shorthand for getter only
* `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

None

0 comments on commit d75bdff

Please sign in to comment.