EmberJS is one of the most comprehensive MVC frameworks of the day - it's 
"batteries included" (like web2py).

It is inspired by Ruby-on-Rails, in terms of preferring 
"convention-over-configuration" (like web2py).

It has "sane defaults" for the high-level architecture, so it could require 
minimal code for standard stuff (like web2py).

The MVC naming-structure is somewhat different, but essentially the same 
components exist as in web2py.

 

*The Router:*

 

Like in web2py, there is a convention for mapping controllers to views, but 
unlike web2py, routing (the mapping of URLs to code) is done explicitly.

It is analogous to web2py's "routs.py" file.

The router is doing client-side routing, translating code to URL and 
vice-versa. 

 

*The Model:*

* *

Firstly, there is an extension called EmberData that works holistically 
with EmberJS (but can be used without it) that does all the 
front-end/back-end synchronization.

It is analogues to web2py's database-abstraction-layer (DAL) architecture, 
for supporting multiple optional back-ends, and converting data to an ORM 
(object-relation-model).

As in RoR (ruby-on-rails), the conversion is done via "Adapters" which are 
like web2py's DAL-drivers.

In RoR it outputs what's known as "Active-Records" - essentially, objects 
that map to the back-end, and "know" how to save/update data back.

In EmberData you would write:

                model  = DS.Store.create()

Where in web2py you would write:

                db = DAL(<connection-string>)

The data received from the backend, after being converted to ORM objects, 
is known as "Records".

What is called "Record" in EmberData is essentially like a "Row" object in 
web2py, and similarly a "RecordArray" in EmberData is analogous to a "Rows" 
object in web2py.

 

 *The View:*

 

In EmberJS, a "view" is somewhat different from what a "view" in web2py, as 
it deals with user-interaction event-handeling.

However, EmberJS uses "Templates" which are essentially what web2py's 
"views" are. It even uses very similar templating  language with a 
squirrely-brackets ("{{<somthing>}}").

It has similar uses, so where in web2py, a controller "passes" data to the 
view, in EmberJS a controller "binds" data to a template.

The difference here is that because it is all client-side, EmberJS can do 
data-binding - whenever a controller's bound-data changes, the template 
automatically updates itself in the UI.

Additionally, in EmberJS there are special names that do special things 
inside a template.

For example:

Where in web2py, the "layout" may have something like:

                ...

                <header>...</header>

                ...            

                {{include}}

                ...

                <footer>...</footer>

                ...

In ember it would be:

                ...

                <header>...</header>

                ...            

                {{outlet}}

                ...

                <footer>...</footer>

                ...

Essentially meaning "everything else inside this template, put here"...

 

Similarly, where in web2py you would write:

                ...

                {{if someBoolean}}

                <div>{{someBoolean}}</div>

                {{pass}}

                ...

                <ol>

                                {{for a in someArray}}

                                <li>{{a}}</li>

                                {{pass}}

                </ol>

                ...

In EmberJS it would look something like this:

                ...

                {{#if someBoolean}}

                <div>{{someBoolean}}</div>

                {{/if}}

                ...

                <ol>

                                {{#each a in someArray}}

                                <li>{{a}}</li>

                                {{/each}}

                </ol>

                ...

Also, where in web2py the mapping of views to controllers is done via 
folder-structure + file-naming,

in EmberJS it is done via name-mapping of controller-object-name and 
template-object-name.

 

 *The Controller:*

* *

In web2py a controller automatically maps to a sub-set of the URL, and may 
have many functions called "Actions", which each is mapped to a view.

In EmberJS this is further generalized in the "Router", which can contain 
many nested "Routs", each mapped to a single "controller" via the router 
and/or naming-convention.

So an EmberJS "Rout" is analogous to a web2py "Controller", and an EmberJS 
"Controller" is analogous to a web2py "Controller-Action".

This is offers a more flexible hierarchy for the application, as a router 
can "nest" routs as deeply as you want.

 

 

Here are some great (and funny) videos about Ember (watching in order is 
advisable):

 

EmberData <http://youtu.be/_6yMxU-_ARs>

 

EmberJS <http://youtu.be/4Ed_o3_59ME> (you can skip the live-demo part in 
the middle, it's not very clear here..)

 

Live Demo <http://youtu.be/Ga99hMi7wfY> (This one is very clear.)

-- 

--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to web2py+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to