Comments (3)
Sorry for getting a bit late on this.
Using @presenter
tag will not work out of the box, since the Presenter must be known before executing the compiled template and the tags are evaluated at runtime.
Another option is to have Vue style template files.
<template>
Your HTML
</template>
<style>
</style>
<presenter>
class UserPresenter {
}
module.exports = UserPresenter
</presenter>
Couple of things to note.
- The client Javascript cannot be written inside the
presenter
block. - The
style
will work ascssinjs
specs. Since Edge is a simple server template engine, I have no plans to add webpack support to compile a server template and allow 30 ways to write css.
from edge.
Thanks for the flow chart...
Also with the addition of cssinjs
it makes a lot of sense to have a vue like template file
As to your notes:
The client Javascript cannot be written inside the presenter block.
I think that since we're not gonna use the script tag then this shouldn't confuse anyone but regardless, it wouldn't hurt to mention it in the docs for newcomers, just in case.
The style will work as cssinjs specs. Since Edge is a simple server template engine, I have no plans to add webpack support to compile a server template and allow 30 ways to write css.
This is very reasonable... i agree... edge does it job well as server side templating engine and if someone needs a bazillion ways to write css then he's most likely making a spa which isn't the purpose of a server side templating engine.
I really believe that Edge is in a sweet-spot right now.. where it's easy to use and remember the syntax but also powerful specially with the addition of features such as template literals
, cssinjs
and hopefully, presenter
logic inside edge files.
from edge.
The v3
has removed presenters completely for the edge templates and this is done to improve the errors debugging.
More info
Earlier edge was using a runtime method called ctx.resolve
to resolve the value of a variable at runtime and used to hop between multiple places to find the value. For example:
- Look for value inside the template state
- Fallback to presenter properties
- Fallback to globals
However, if a Syntax error exception was raised during ctx.resolve
, the end user used to see unhelpful error message. For example:
The template has following snippet
{{ username.toUpperCase() }}
It will be compiled down to
ctx.resolve('username').toUpperCase()
Let's imagine the username
is an object and not a string. The error raise by Javascript runtime will be
TypeError: resolve(...).toUpperCase is not a function
Now, the end user has no idea what resolve
is.
The above scenario is a very simple example. In some cases, it gets even uglier.
Conclusion
I know, that Presenters were helpful, but the downside of seeing cryptic messages weighs the upsides of Presenters. There are many smart ways to work around with Presenters, but not much to overcome the cryptic errors.
Happy to discuss more :)
from edge.
Related Issues (20)
- How to view documentation old version ? HOT 3
- Links are dead in legacy documentation HOT 1
- Simplify prop binding and conditional props HOT 2
- Issue while rendering string having spaces HOT 3
- Condition in one line HOT 2
- Is there a better way to import multiple functions? HOT 4
- Unable to display an image HOT 1
- Is it possible to perform a static analysis of the template Edge.js ? HOT 4
- Just a silly question HOT 2
- Passing values from edge to alpine.js (Question) HOT 3
- Merging props with a default value HOT 1
- Is there a way to share locals rendered in the view to the frontend script? HOT 1
- How do I use this with TypeScript HOT 2
- How to use edge.js as standalone template engine? HOT 3
- One line conditional for dynamic classes? HOT 2
- Numeric `0` passed as `@!component()` agrument becomes nothing in the component. Passing it as string goes fine. HOT 4
- edge.global is not a function HOT 1
- Section does not render inside an if tag HOT 1
- edge-js build failing with nw-gyp HOT 3
- Section with Partials HOT 2
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 edge.