How to modify the scope chain without `with` ?
Garrett Smith
dhtmlkitchen at gmail.com
Tue Feb 16 17:38:47 UTC 2016
On Mon, Feb 15, 2016 at 1:13 AM, Coroutines <coroutines at gmail.com> wrote:
> This post might be overly wordy. Sorry. It relates to the
> functionality provided by the `with` keyword and why I think it's
> important in the future.
>
> I am currently rewriting a templating module that I think is very
> useful for it's ability to turn a function in coffeescript syntax into
> a sort of DSL - something that looks like this:
>
> template = ->
> doctype 5
> html ->
> head ->
> title @title
> body ->
> div id: 'content', ->
> if @posts?
> for p in @posts
> div class: 'post', ->
> p p.name
> div p.comment
> form method: 'post', ->
> ul ->
> li -> input name: 'name'
> li -> textarea name: 'comment'
> li -> input type: 'submit'
>
> For those not familiar with Coffeescript, "= ->" creates a function
> with no arguments, the indented sub-block is the body of the function.
>
> All of these things essentially compile into nested functions like:
> html(head(title(this.title))
>
> (not an exact translation)
>
> Anyway, this library/module called (ck) exploits the little-used
> `with` keyword. It creates a function like this:
>
> function (scope, template) { with (scope) { template(); } }
>
> So the template is just a series of functions that lookup within
> `scope` for a function creating HTML. The problem is this module
> (imo) wastefully creates a lot of closures to create the HTML tags.
>
I think you'll have a lot better luck starting out like I did: Learn
HTML first. You're working on some complicated stuff there, and for
me, I always try to get simple to work. Simple and working is good!
You cannot have too solid of a grasp of HTML. Ditto for CSS.
When it comes to javascript, context and scope can be tricky and
confusing for those coming from other languages.
Thank you,
--
Garrett
@xkit
ChordCycles.wordpress.com
garretts.github.io
personx.tumblr.com
More information about the es-discuss
mailing list