Comments (9)
@sandstrom The problem with proxies is that they are a leaky abstraction that is also very viral. I'm looking forward to removing the linked piece of code. Even our base Stream class has to have special code to work with Proxies: https://github.com/emberjs/ember.js/blob/master/packages/ember-metal/lib/streams/stream.js#L180-L202.
I would much prefer experimenting with how we can push decoration into userspace.
from rfcs.
@mmun I understand the concern.
If the unwrapping happened in the actions-handling of routes and components instead, is that something you'd prefer? (that'll work equally well for all use-cases I can think of)
from rfcs.
friendly ping @mmun
from rfcs.
@sandstrom Sorry, I missed this. I think that implicit unwrapping anywhere is the codesmell of a bad pattern. So I'm not a fan.
from rfcs.
ES6 proxies (once enough platforms support) will be an abstraction that doesn't have the same issues.
The question is, what should exist in the interim? How do we minimize the leaks and confusions of today
from rfcs.
Decoration is useful in various situations, and a common pattern across languages and frameworks. For decoration to work well with actions unwrapping is desired — which is why this is implemented in Ember.
I understand that you dislike it, but it must not be default. Ember is extensible in many ways, which is great. But this is a place where it's currently hard.
Say, for example, there was a method one could override in routes/components—to act on the action arguments before they were passed on to the action-handler—that would be enough. There wouldn't even be unwrapping in the framework, only the ability to implement it if needed.
from rfcs.
Decoration is useful in various situations, and a common pattern across languages and frameworks. For decoration to work well with actions unwrapping is desired — which is why this is implemented in Ember.
We don't argue it isn't useful, rather in JS today it some with a hefty abstraction leak cost.
from rfcs.
I get decorators. I'm fine with explicit unwrapping. I'm not fine with implicit unwrapping. I've been burned too many times, across multiple languages and frameworks.
Concretely, I never want to think "Is this a controller or is this a model?" ever again.
My opinion may not reflect the opinions of the rest of the core team.
from rfcs.
If it was possible to 'sub-class' the action helper (basically get a chance to act on action helper invocations) adding decorator-unwrapping would be easy. It would also allow for other things, for example logging of all action calls.
This should be possible now, with actions being simple functions one can curry or wrap a function to provide the desired unwrapping-functionality.
Closing this.
from rfcs.
Related Issues (20)
- Make `captureRenderTree` API public HOT 4
- Missing template features and syntaxes HOT 1
- Replace `babel-eslint` with `@babel/eslint-parser` in blueprints HOT 3
- Switch default package manager to pnpm for new projects + C.I. HOT 44
- Public API support disparity with Glint and typed templates with custom managers -- currently no story for TS support (for now?) HOT 5
- Deprecate support for `ember-cli-qunit` and `ember-cli-mocha` when generating test blueprints HOT 3
- Standardize the use of yarn and npm scripts in the Ember experience, for test and start HOT 11
- V2 addons' build-time integration HOT 4
- Deprecate all of Ember Classic HOT 16
- Build-time configuration of index.html HOT 3
- Deprecate support for Travis CI HOT 6
- Deprecate `ember-mocha`? HOT 2
- Deprecate `ember-export-application-global` addon? HOT 4
- Run Prettier separately in `app` blueprint HOT 9
- Deprecate `app.import`
- Thoughts on this more ergonomic way to wire up the owner + destroyable association? HOT 2
- Explore "official" pod deprecation HOT 19
- {{else}} should render a value rather than be a control-flow keyword. HOT 5
- new primitive: transition, similar to modifiers, except they block certain render events HOT 2
- Numbers in PR titles affect automation
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from rfcs.