Giter Club home page Giter Club logo

Comments (3)

thetutlage avatar thetutlage commented on August 10, 2024

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.

Flow looks like this
screen shot 2018-06-01 at 1 08 43 pm

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.

  1. The client Javascript cannot be written inside the presenter block.
  2. 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.

from edge.

hadihallak avatar hadihallak commented on August 10, 2024

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.

thetutlage avatar thetutlage commented on August 10, 2024

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)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.