SlideShare une entreprise Scribd logo
1  sur  34
Télécharger pour lire hors ligne
JavascriptMVC
Another choose of web framework
          Alive C. Kuo
About me
● 2010.01.04 ~ 2012.05.31
  VIVOTEK Inc.,
  software engineer
● 2012.06.01 ~ *
  Mozilla Corp.,
  Front end enigeer
● ~1.5year web application experience
● email: alegnadise@gmail.com
Life is a struggle
● Web application is hard to design and
  implement
● Framework
  ○ Client side
    ■ YUI
    ■ extjs
    ■ backbone
    ■ knockout
    ■ ...
  ○ Server side
    ■ zk
    ■ RoR
    ■ shtml
    ■ ...
jQuery
●   It is a library, not a framework.
●   High performance to DOM scripting
●   Easy to use with method chain
●   http://jquery.com
●   But, there's something we need it lacks..
What jQuery lack
●   Cross plugin communication
●   Ajax gateway
●   Web application management
●   js/css/html files/directories management
●   jQuery,
    will not teach you how to org your (huge)
    web application.
Life is a struggle (CONT.)
● Just survey it.
   ○ Work hard every day.
ExtJS
● http://www.sencha.com/products/extjs/
● The initial version is forked from YUI2.
● PROS
   ○ Beautiful and uniform and windows-like UI styles
● CONS
   ○ Customization is hard to do.
   ○ NO MIT. It is a commercial product.
YUI
● http://developer.yahoo.com/yui/
● PROS
  ○ uniform UI styles
  ○ YQuery is suitable for cross-domain query.
  ○ Many F2E in Yahoo! will maintain it.
● CONS
  ○ Also customization.
backbone.js
● http://documentcloud.github.com/backbone/
● A MVC framework known to Mobile
● PROS
  ○ Resource more than javascripMVC!
● CONS
  ○ Just MVC layer. NO preset UI layer implementation
  ○ Documentation seems difficult to understand.
javascriptMVC
● http://javascriptmvc.com
● PROS
  ○ MIT license
  ○ Clear documentation
  ○ Nearly total solution to build a web application
● CONS
  ○ Less resource in Taiwan
  ○ No preset UI layer implementation
Successful story
Why I choose javascriptMVC finally?
● clientside MVC - Meet my requirement on
  embedded system.
● I just couldn't figure out backbone's
  documentation and example.
Life is a struggle. (CONT.)
● But, I still spend serveral days to read whole
  of its document and its forum.
● Try to understand why and how.
Nice features in javascriptMVC
● Clear models/views/controllers and class
  inheritance
● CRUD Model layer
● Native event delegation
● View with Embedded js
● Fixture
● Library dependancy solution
● Build process
● Less CSS integration
● OpenAjax pubsub
● A basic application/project/product
Case By Case
Struggle and the Way
CSS Struggles - Collision
● a.css
  div.data {
      background-color: red;
  }
● b.css
  div.data {
      background-color: white;
  }
CSS struggles - One Level
Statement/Rule Weight
● div.viewcell > div.plugin span.title span {}
● CSS rule has weights.
● CSS solutions:
  ○ SASS
  ○ Compass
  ○ LessCSS
CSS Super Language
● SASS/Compass
  ○ Mixin, Variable, Sprite helper, Functions, CSS3
    Helpers
  ○ jsfiddle(http://jsfiddle.net) supports SASS!
● LESS
  ○   http://lesscss.org
  ○   Javascript evaluable
  ○   Less feature than SASS
  ○   Both server side(Rhino or Node.js) & client side
      (Need compilation)
LESS
@company_blue: #0186d1;
@focus_width: 100;
div#content {
   div.title {
      background-color: @company_blue;
      &:hover,&:active {
          width: @focus_width;
      }
   }
}
Data Struggle - I don't want to know
the details
● Backend service
  ○   CGI
  ○   fast cgi/wsgi
  ○   URL command
  ○   Dbus
  ○   Gconf
  ○   Web service
  ○   Tunnel message
  ○   JSON/XML
  ○   ...
CRUD
● Create/Read/Update/Delete is most common
  for every kind of data access.
● Implement and wrapper your backend
  service for CRUD.
  ○   DataModel.create()
  ○   DataModel.update()
  ○   DataModel.delete()
  ○   DataModel.read()
$.Model
● CRUD functions, overwrittable
● Event callback whenever data is
  ○   created
  ○   deleted
  ○   updated
  ○   and if you like, custom event on model is creatable.
● DOM embeddable
  ○ <div <%= model %></div>
● Validation in data model layer
Plugin/Widget/UI component
Struggle
● None loosely coupled.
● No cross function communication.
● DOM renew and event rebind
  ○ a long long string in your javascript like
    ■ $('#div').html('<div class="event"><span class="
        name"></span><span class="icon"
        ></span></div>')
$.Controller features
● OpenAjax PubSub
  ○ Not jQuery.pubsub, but the similar thing they could
    do.
● DOM manipulation is delegated to $.View()
● Native event delegation
  ○ jQuery.on()
  ○ 'button#save click': function(el, ev){
    }
● FAST!
$.View features
● Seperate HTML from your javascript codes.
● Reusable, cachable
● Logic (javascript) in HTML
  ○ http://embeddedjs.com
  ○ <ul>
      <% for(var i=0; i<supplies.length; i++) {%
      >
      <li><%= supplies[i] %></li>
      <% } %>
      </ul>
Library struggle - dependancy
● Case
    ○ jQuery.scrollbars(http://www.aplweb.co.uk/blog/js/scrollbars-v2/) depends on
      the following libraries
       ■ jQuery
       ■ jQuery.event.drag
       ■ jQuery.resize
       ■ mousehold
       ■ mousewheel
    ○ So, hardcode in your <head>.
 <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
 <script src="http://threedubmedia.googlecode.com/files/jquery.event.drag-2.0.min.js"></script>
 <script src="http://github.com/cowboy/jquery-resize/raw/v1.1/jquery.ba-resize.min.js"></script>
 <script src="http://remysharp.com/demo/mousehold.js"></script>
 <script src="https://raw.github.com/brandonaaron/jquery-mousewheel/master/jquery.mousewheel.js"></script>
Library struggle (CONT.)
● When your web application grows, more
  and more external libraries is used.
● The result will be a non-maintainable
  <head/>
StealJS
● Library dependancy solution
  ○ Part of stealJS is something like requireJS.
  ○ By concurrent ajax request.
  ○ steal('jquery').then
    ('jquery/ui','jquery/event/mousewheel').then('./lol.css',
    function(){
        //....
    });
● Code generator
  ○ ./js jquery/templates/controller A.B.C
● Compile scripts
● (Customizable) build process
Ajax struggle
● You can do nothing without server. Do you?
● Multi ajax request solution
Deferred Model
● Since jQuery 1.5, ajax is implemented as a
  deferred object.
● Models CRUD support deferred operation.
● $.fixture
  ○ Create a deferred instead of sending
    XMLHttpRequest to the server, but to the function
    you preferred.
Form operation
● Using formParams(), retrieve data from a
  form is easier.
● You do not to collect value one by one input.
The end?
● No, you will face problems if you want to
  start building a large web application using
  javascriptMVC.
● So how could I organize my application?
Next Topic:
● Let's rock on JavascriptMVC
  ○   How to start coding with JavascriptMVC?
  ○   What JavascriptMVC document lacks
  ○   A framework based on JavascriptMVC
  ○   Some common rules.
  ○   An example
Javascript is beautiful.
Let's use it to get the world better.

Contenu connexe

Tendances

An Abusive Relationship with AngularJS
An Abusive Relationship with AngularJSAn Abusive Relationship with AngularJS
An Abusive Relationship with AngularJSMario Heiderich
 
NodeJs Intro - JavaScript Zagreb Meetup #1
NodeJs Intro - JavaScript Zagreb Meetup #1NodeJs Intro - JavaScript Zagreb Meetup #1
NodeJs Intro - JavaScript Zagreb Meetup #1Tomislav Capan
 
Full stack java script development
Full stack java script developmentFull stack java script development
Full stack java script developmentTomislav Capan
 
Drupal Camp Kiev 2012 - High Performance Drupal Web Sites
Drupal Camp Kiev 2012 - High Performance Drupal Web SitesDrupal Camp Kiev 2012 - High Performance Drupal Web Sites
Drupal Camp Kiev 2012 - High Performance Drupal Web SitesJean-Baptiste Guerraz
 
Isomorphic React + Flux at Yahoo
Isomorphic React + Flux at YahooIsomorphic React + Flux at Yahoo
Isomorphic React + Flux at YahooItia Chang
 
The Bleeding Edge
The Bleeding EdgeThe Bleeding Edge
The Bleeding EdgejClarity
 
JavaScript para Graficos y Visualizacion de Datos
JavaScript para Graficos y Visualizacion de DatosJavaScript para Graficos y Visualizacion de Datos
JavaScript para Graficos y Visualizacion de Datosphilogb
 
MEAN Stack - Introduction & Advantages - Why should you switch to MEAN stack ...
MEAN Stack - Introduction & Advantages - Why should you switch to MEAN stack ...MEAN Stack - Introduction & Advantages - Why should you switch to MEAN stack ...
MEAN Stack - Introduction & Advantages - Why should you switch to MEAN stack ...Hariharan Ganesan
 
まよいの墓(WebVR編)
まよいの墓(WebVR編)まよいの墓(WebVR編)
まよいの墓(WebVR編)KatsuyaENDOH
 
Web Applications Development with MEAN Stack
Web Applications Development with MEAN StackWeb Applications Development with MEAN Stack
Web Applications Development with MEAN StackShailendra Chauhan
 
Javascript Update May 2013
Javascript Update May 2013Javascript Update May 2013
Javascript Update May 2013Ramesh Nair
 
Incremental DOM and Recent Trend of Frontend Development
Incremental DOM and Recent Trend of Frontend DevelopmentIncremental DOM and Recent Trend of Frontend Development
Incremental DOM and Recent Trend of Frontend DevelopmentAkihiro Ikezoe
 
Fastest Way of Creating Gutenberg Blocks - WordCamp Rochester
Fastest Way of Creating Gutenberg Blocks - WordCamp RochesterFastest Way of Creating Gutenberg Blocks - WordCamp Rochester
Fastest Way of Creating Gutenberg Blocks - WordCamp RochesterImran Sayed
 
Introduction to webGL
Introduction to webGLIntroduction to webGL
Introduction to webGL志鴻 詹
 
New Tools for Visualization in JavaScript - Sept. 2011
New Tools for Visualization in JavaScript - Sept. 2011New Tools for Visualization in JavaScript - Sept. 2011
New Tools for Visualization in JavaScript - Sept. 2011philogb
 

Tendances (20)

An Abusive Relationship with AngularJS
An Abusive Relationship with AngularJSAn Abusive Relationship with AngularJS
An Abusive Relationship with AngularJS
 
NodeJs Intro - JavaScript Zagreb Meetup #1
NodeJs Intro - JavaScript Zagreb Meetup #1NodeJs Intro - JavaScript Zagreb Meetup #1
NodeJs Intro - JavaScript Zagreb Meetup #1
 
Full stack java script development
Full stack java script developmentFull stack java script development
Full stack java script development
 
Drupal Camp Kiev 2012 - High Performance Drupal Web Sites
Drupal Camp Kiev 2012 - High Performance Drupal Web SitesDrupal Camp Kiev 2012 - High Performance Drupal Web Sites
Drupal Camp Kiev 2012 - High Performance Drupal Web Sites
 
Isomorphic React + Flux at Yahoo
Isomorphic React + Flux at YahooIsomorphic React + Flux at Yahoo
Isomorphic React + Flux at Yahoo
 
The Bleeding Edge
The Bleeding EdgeThe Bleeding Edge
The Bleeding Edge
 
Web worker
Web workerWeb worker
Web worker
 
Vanjs backbone-powerpoint
Vanjs backbone-powerpointVanjs backbone-powerpoint
Vanjs backbone-powerpoint
 
JavaScript para Graficos y Visualizacion de Datos
JavaScript para Graficos y Visualizacion de DatosJavaScript para Graficos y Visualizacion de Datos
JavaScript para Graficos y Visualizacion de Datos
 
MEAN Stack - Introduction & Advantages - Why should you switch to MEAN stack ...
MEAN Stack - Introduction & Advantages - Why should you switch to MEAN stack ...MEAN Stack - Introduction & Advantages - Why should you switch to MEAN stack ...
MEAN Stack - Introduction & Advantages - Why should you switch to MEAN stack ...
 
The Appy Hour
The Appy HourThe Appy Hour
The Appy Hour
 
まよいの墓(WebVR編)
まよいの墓(WebVR編)まよいの墓(WebVR編)
まよいの墓(WebVR編)
 
New paradigms
New paradigmsNew paradigms
New paradigms
 
Web Applications Development with MEAN Stack
Web Applications Development with MEAN StackWeb Applications Development with MEAN Stack
Web Applications Development with MEAN Stack
 
Javascript Update May 2013
Javascript Update May 2013Javascript Update May 2013
Javascript Update May 2013
 
Incremental DOM and Recent Trend of Frontend Development
Incremental DOM and Recent Trend of Frontend DevelopmentIncremental DOM and Recent Trend of Frontend Development
Incremental DOM and Recent Trend of Frontend Development
 
Webpack
WebpackWebpack
Webpack
 
Fastest Way of Creating Gutenberg Blocks - WordCamp Rochester
Fastest Way of Creating Gutenberg Blocks - WordCamp RochesterFastest Way of Creating Gutenberg Blocks - WordCamp Rochester
Fastest Way of Creating Gutenberg Blocks - WordCamp Rochester
 
Introduction to webGL
Introduction to webGLIntroduction to webGL
Introduction to webGL
 
New Tools for Visualization in JavaScript - Sept. 2011
New Tools for Visualization in JavaScript - Sept. 2011New Tools for Visualization in JavaScript - Sept. 2011
New Tools for Visualization in JavaScript - Sept. 2011
 

En vedette

#FirefoxOS Web App development@CID Nyári Egyetem 2013
#FirefoxOS Web App development@CID Nyári Egyetem 2013#FirefoxOS Web App development@CID Nyári Egyetem 2013
#FirefoxOS Web App development@CID Nyári Egyetem 2013daf182
 
[COSCUP 2013] Audio Competing
[COSCUP 2013] Audio Competing[COSCUP 2013] Audio Competing
[COSCUP 2013] Audio CompetingAlive Kuo
 
FXOS Window management 101
FXOS Window management 101FXOS Window management 101
FXOS Window management 101Alive Kuo
 
[Coscup 2012] JavascriptMVC
[Coscup 2012] JavascriptMVC[Coscup 2012] JavascriptMVC
[Coscup 2012] JavascriptMVCAlive Kuo
 
FirefoxOS Window Management
FirefoxOS Window ManagementFirefoxOS Window Management
FirefoxOS Window ManagementAlive Kuo
 
Firefox OS Window management 201
Firefox OS Window management 201Firefox OS Window management 201
Firefox OS Window management 201Alive Kuo
 
Study: The Future of VR, AR and Self-Driving Cars
Study: The Future of VR, AR and Self-Driving CarsStudy: The Future of VR, AR and Self-Driving Cars
Study: The Future of VR, AR and Self-Driving CarsLinkedIn
 

En vedette (7)

#FirefoxOS Web App development@CID Nyári Egyetem 2013
#FirefoxOS Web App development@CID Nyári Egyetem 2013#FirefoxOS Web App development@CID Nyári Egyetem 2013
#FirefoxOS Web App development@CID Nyári Egyetem 2013
 
[COSCUP 2013] Audio Competing
[COSCUP 2013] Audio Competing[COSCUP 2013] Audio Competing
[COSCUP 2013] Audio Competing
 
FXOS Window management 101
FXOS Window management 101FXOS Window management 101
FXOS Window management 101
 
[Coscup 2012] JavascriptMVC
[Coscup 2012] JavascriptMVC[Coscup 2012] JavascriptMVC
[Coscup 2012] JavascriptMVC
 
FirefoxOS Window Management
FirefoxOS Window ManagementFirefoxOS Window Management
FirefoxOS Window Management
 
Firefox OS Window management 201
Firefox OS Window management 201Firefox OS Window management 201
Firefox OS Window management 201
 
Study: The Future of VR, AR and Self-Driving Cars
Study: The Future of VR, AR and Self-Driving CarsStudy: The Future of VR, AR and Self-Driving Cars
Study: The Future of VR, AR and Self-Driving Cars
 

Similaire à JavascriptMVC: Another choice of web framework

Architektura html, css i javascript - Jan Kraus
Architektura html, css i javascript - Jan KrausArchitektura html, css i javascript - Jan Kraus
Architektura html, css i javascript - Jan KrausWomen in Technology Poland
 
GWT - Building Rich Internet Applications Using OO Tools
GWT - Building Rich Internet Applications Using OO ToolsGWT - Building Rich Internet Applications Using OO Tools
GWT - Building Rich Internet Applications Using OO Toolsbarciszewski
 
HTML, CSS & Javascript Architecture (extended version) - Jan Kraus
HTML, CSS & Javascript Architecture (extended version) - Jan KrausHTML, CSS & Javascript Architecture (extended version) - Jan Kraus
HTML, CSS & Javascript Architecture (extended version) - Jan KrausWomen in Technology Poland
 
HTML5 New Features and Resources
HTML5 New Features and ResourcesHTML5 New Features and Resources
HTML5 New Features and ResourcesRon Reiter
 
You Can Work on the Web Patform! (GOSIM 2023)
You Can Work on the Web Patform! (GOSIM 2023)You Can Work on the Web Patform! (GOSIM 2023)
You Can Work on the Web Patform! (GOSIM 2023)Igalia
 
Front-End Developer's Career Roadmap
Front-End Developer's Career RoadmapFront-End Developer's Career Roadmap
Front-End Developer's Career RoadmapWebStackAcademy
 
In the DOM, no one will hear you scream
In the DOM, no one will hear you screamIn the DOM, no one will hear you scream
In the DOM, no one will hear you screamMario Heiderich
 
Building Real-World Dojo Web Applications
Building Real-World Dojo Web ApplicationsBuilding Real-World Dojo Web Applications
Building Real-World Dojo Web ApplicationsAndrew Ferrier
 
JS Fest 2019/Autumn. Влад Федосов. Technology agnostic microservices at SPA f...
JS Fest 2019/Autumn. Влад Федосов. Technology agnostic microservices at SPA f...JS Fest 2019/Autumn. Влад Федосов. Technology agnostic microservices at SPA f...
JS Fest 2019/Autumn. Влад Федосов. Technology agnostic microservices at SPA f...JSFestUA
 
JSFest 2019: Technology agnostic microservices at SPA frontend
JSFest 2019: Technology agnostic microservices at SPA frontendJSFest 2019: Technology agnostic microservices at SPA frontend
JSFest 2019: Technology agnostic microservices at SPA frontendVlad Fedosov
 
Client vs Server Templating: Speed up initial load for SPA with Angular as an...
Client vs Server Templating: Speed up initial load for SPA with Angular as an...Client vs Server Templating: Speed up initial load for SPA with Angular as an...
Client vs Server Templating: Speed up initial load for SPA with Angular as an...David Amend
 
Drupalcamp performance
Drupalcamp performanceDrupalcamp performance
Drupalcamp performanceFrontkom
 
jQuery: The World's Most Popular JavaScript Library Comes to XPages
jQuery: The World's Most Popular JavaScript Library Comes to XPagesjQuery: The World's Most Popular JavaScript Library Comes to XPages
jQuery: The World's Most Popular JavaScript Library Comes to XPagesTeamstudio
 
PyGrunn2013 High Performance Web Applications with TurboGears
PyGrunn2013  High Performance Web Applications with TurboGearsPyGrunn2013  High Performance Web Applications with TurboGears
PyGrunn2013 High Performance Web Applications with TurboGearsAlessandro Molina
 
Developing high performance and responsive web apps using web worker
Developing high performance and responsive web apps using web workerDeveloping high performance and responsive web apps using web worker
Developing high performance and responsive web apps using web workerSuresh Patidar
 
Tech meetup: Web Applications Performance
Tech meetup: Web Applications PerformanceTech meetup: Web Applications Performance
Tech meetup: Web Applications PerformanceSantex Group
 
jQuery Conference Austin Sept 2013
jQuery Conference Austin Sept 2013jQuery Conference Austin Sept 2013
jQuery Conference Austin Sept 2013dmethvin
 
jQuery - Chapter 1 - Introduction
 jQuery - Chapter 1 - Introduction jQuery - Chapter 1 - Introduction
jQuery - Chapter 1 - IntroductionWebStackAcademy
 

Similaire à JavascriptMVC: Another choice of web framework (20)

Architektura html, css i javascript - Jan Kraus
Architektura html, css i javascript - Jan KrausArchitektura html, css i javascript - Jan Kraus
Architektura html, css i javascript - Jan Kraus
 
GWT - Building Rich Internet Applications Using OO Tools
GWT - Building Rich Internet Applications Using OO ToolsGWT - Building Rich Internet Applications Using OO Tools
GWT - Building Rich Internet Applications Using OO Tools
 
HTML, CSS & Javascript Architecture (extended version) - Jan Kraus
HTML, CSS & Javascript Architecture (extended version) - Jan KrausHTML, CSS & Javascript Architecture (extended version) - Jan Kraus
HTML, CSS & Javascript Architecture (extended version) - Jan Kraus
 
HTML5 New Features and Resources
HTML5 New Features and ResourcesHTML5 New Features and Resources
HTML5 New Features and Resources
 
Dust.js
Dust.jsDust.js
Dust.js
 
You Can Work on the Web Patform! (GOSIM 2023)
You Can Work on the Web Patform! (GOSIM 2023)You Can Work on the Web Patform! (GOSIM 2023)
You Can Work on the Web Patform! (GOSIM 2023)
 
Front-End Developer's Career Roadmap
Front-End Developer's Career RoadmapFront-End Developer's Career Roadmap
Front-End Developer's Career Roadmap
 
In the DOM, no one will hear you scream
In the DOM, no one will hear you screamIn the DOM, no one will hear you scream
In the DOM, no one will hear you scream
 
Building Real-World Dojo Web Applications
Building Real-World Dojo Web ApplicationsBuilding Real-World Dojo Web Applications
Building Real-World Dojo Web Applications
 
JS Fest 2019/Autumn. Влад Федосов. Technology agnostic microservices at SPA f...
JS Fest 2019/Autumn. Влад Федосов. Technology agnostic microservices at SPA f...JS Fest 2019/Autumn. Влад Федосов. Technology agnostic microservices at SPA f...
JS Fest 2019/Autumn. Влад Федосов. Technology agnostic microservices at SPA f...
 
JSFest 2019: Technology agnostic microservices at SPA frontend
JSFest 2019: Technology agnostic microservices at SPA frontendJSFest 2019: Technology agnostic microservices at SPA frontend
JSFest 2019: Technology agnostic microservices at SPA frontend
 
Client vs Server Templating: Speed up initial load for SPA with Angular as an...
Client vs Server Templating: Speed up initial load for SPA with Angular as an...Client vs Server Templating: Speed up initial load for SPA with Angular as an...
Client vs Server Templating: Speed up initial load for SPA with Angular as an...
 
Drupalcamp performance
Drupalcamp performanceDrupalcamp performance
Drupalcamp performance
 
jQuery: The World's Most Popular JavaScript Library Comes to XPages
jQuery: The World's Most Popular JavaScript Library Comes to XPagesjQuery: The World's Most Popular JavaScript Library Comes to XPages
jQuery: The World's Most Popular JavaScript Library Comes to XPages
 
PyGrunn2013 High Performance Web Applications with TurboGears
PyGrunn2013  High Performance Web Applications with TurboGearsPyGrunn2013  High Performance Web Applications with TurboGears
PyGrunn2013 High Performance Web Applications with TurboGears
 
Developing high performance and responsive web apps using web worker
Developing high performance and responsive web apps using web workerDeveloping high performance and responsive web apps using web worker
Developing high performance and responsive web apps using web worker
 
Tech meetup: Web Applications Performance
Tech meetup: Web Applications PerformanceTech meetup: Web Applications Performance
Tech meetup: Web Applications Performance
 
Nicolas Embleton, Advanced Angular JS
Nicolas Embleton, Advanced Angular JSNicolas Embleton, Advanced Angular JS
Nicolas Embleton, Advanced Angular JS
 
jQuery Conference Austin Sept 2013
jQuery Conference Austin Sept 2013jQuery Conference Austin Sept 2013
jQuery Conference Austin Sept 2013
 
jQuery - Chapter 1 - Introduction
 jQuery - Chapter 1 - Introduction jQuery - Chapter 1 - Introduction
jQuery - Chapter 1 - Introduction
 

Dernier

Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilV3cube
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobeapidays
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsJoaquim Jorge
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?Antenna Manufacturer Coco
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...DianaGray10
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProduct Anonymous
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesBoston Institute of Analytics
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?Igalia
 

Dernier (20)

Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of Brazil
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation Strategies
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 

JavascriptMVC: Another choice of web framework

  • 1. JavascriptMVC Another choose of web framework Alive C. Kuo
  • 2. About me ● 2010.01.04 ~ 2012.05.31 VIVOTEK Inc., software engineer ● 2012.06.01 ~ * Mozilla Corp., Front end enigeer ● ~1.5year web application experience ● email: alegnadise@gmail.com
  • 3. Life is a struggle ● Web application is hard to design and implement ● Framework ○ Client side ■ YUI ■ extjs ■ backbone ■ knockout ■ ... ○ Server side ■ zk ■ RoR ■ shtml ■ ...
  • 4. jQuery ● It is a library, not a framework. ● High performance to DOM scripting ● Easy to use with method chain ● http://jquery.com ● But, there's something we need it lacks..
  • 5. What jQuery lack ● Cross plugin communication ● Ajax gateway ● Web application management ● js/css/html files/directories management ● jQuery, will not teach you how to org your (huge) web application.
  • 6. Life is a struggle (CONT.) ● Just survey it. ○ Work hard every day.
  • 7. ExtJS ● http://www.sencha.com/products/extjs/ ● The initial version is forked from YUI2. ● PROS ○ Beautiful and uniform and windows-like UI styles ● CONS ○ Customization is hard to do. ○ NO MIT. It is a commercial product.
  • 8. YUI ● http://developer.yahoo.com/yui/ ● PROS ○ uniform UI styles ○ YQuery is suitable for cross-domain query. ○ Many F2E in Yahoo! will maintain it. ● CONS ○ Also customization.
  • 9. backbone.js ● http://documentcloud.github.com/backbone/ ● A MVC framework known to Mobile ● PROS ○ Resource more than javascripMVC! ● CONS ○ Just MVC layer. NO preset UI layer implementation ○ Documentation seems difficult to understand.
  • 10. javascriptMVC ● http://javascriptmvc.com ● PROS ○ MIT license ○ Clear documentation ○ Nearly total solution to build a web application ● CONS ○ Less resource in Taiwan ○ No preset UI layer implementation
  • 12. Why I choose javascriptMVC finally? ● clientside MVC - Meet my requirement on embedded system. ● I just couldn't figure out backbone's documentation and example.
  • 13. Life is a struggle. (CONT.) ● But, I still spend serveral days to read whole of its document and its forum. ● Try to understand why and how.
  • 14. Nice features in javascriptMVC ● Clear models/views/controllers and class inheritance ● CRUD Model layer ● Native event delegation ● View with Embedded js ● Fixture ● Library dependancy solution ● Build process ● Less CSS integration ● OpenAjax pubsub ● A basic application/project/product
  • 15. Case By Case Struggle and the Way
  • 16. CSS Struggles - Collision ● a.css div.data { background-color: red; } ● b.css div.data { background-color: white; }
  • 17. CSS struggles - One Level Statement/Rule Weight ● div.viewcell > div.plugin span.title span {} ● CSS rule has weights. ● CSS solutions: ○ SASS ○ Compass ○ LessCSS
  • 18. CSS Super Language ● SASS/Compass ○ Mixin, Variable, Sprite helper, Functions, CSS3 Helpers ○ jsfiddle(http://jsfiddle.net) supports SASS! ● LESS ○ http://lesscss.org ○ Javascript evaluable ○ Less feature than SASS ○ Both server side(Rhino or Node.js) & client side (Need compilation)
  • 19. LESS @company_blue: #0186d1; @focus_width: 100; div#content { div.title { background-color: @company_blue; &:hover,&:active { width: @focus_width; } } }
  • 20. Data Struggle - I don't want to know the details ● Backend service ○ CGI ○ fast cgi/wsgi ○ URL command ○ Dbus ○ Gconf ○ Web service ○ Tunnel message ○ JSON/XML ○ ...
  • 21. CRUD ● Create/Read/Update/Delete is most common for every kind of data access. ● Implement and wrapper your backend service for CRUD. ○ DataModel.create() ○ DataModel.update() ○ DataModel.delete() ○ DataModel.read()
  • 22. $.Model ● CRUD functions, overwrittable ● Event callback whenever data is ○ created ○ deleted ○ updated ○ and if you like, custom event on model is creatable. ● DOM embeddable ○ <div <%= model %></div> ● Validation in data model layer
  • 23. Plugin/Widget/UI component Struggle ● None loosely coupled. ● No cross function communication. ● DOM renew and event rebind ○ a long long string in your javascript like ■ $('#div').html('<div class="event"><span class=" name"></span><span class="icon" ></span></div>')
  • 24. $.Controller features ● OpenAjax PubSub ○ Not jQuery.pubsub, but the similar thing they could do. ● DOM manipulation is delegated to $.View() ● Native event delegation ○ jQuery.on() ○ 'button#save click': function(el, ev){ } ● FAST!
  • 25. $.View features ● Seperate HTML from your javascript codes. ● Reusable, cachable ● Logic (javascript) in HTML ○ http://embeddedjs.com ○ <ul> <% for(var i=0; i<supplies.length; i++) {% > <li><%= supplies[i] %></li> <% } %> </ul>
  • 26. Library struggle - dependancy ● Case ○ jQuery.scrollbars(http://www.aplweb.co.uk/blog/js/scrollbars-v2/) depends on the following libraries ■ jQuery ■ jQuery.event.drag ■ jQuery.resize ■ mousehold ■ mousewheel ○ So, hardcode in your <head>. <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script> <script src="http://threedubmedia.googlecode.com/files/jquery.event.drag-2.0.min.js"></script> <script src="http://github.com/cowboy/jquery-resize/raw/v1.1/jquery.ba-resize.min.js"></script> <script src="http://remysharp.com/demo/mousehold.js"></script> <script src="https://raw.github.com/brandonaaron/jquery-mousewheel/master/jquery.mousewheel.js"></script>
  • 27. Library struggle (CONT.) ● When your web application grows, more and more external libraries is used. ● The result will be a non-maintainable <head/>
  • 28. StealJS ● Library dependancy solution ○ Part of stealJS is something like requireJS. ○ By concurrent ajax request. ○ steal('jquery').then ('jquery/ui','jquery/event/mousewheel').then('./lol.css', function(){ //.... }); ● Code generator ○ ./js jquery/templates/controller A.B.C ● Compile scripts ● (Customizable) build process
  • 29. Ajax struggle ● You can do nothing without server. Do you? ● Multi ajax request solution
  • 30. Deferred Model ● Since jQuery 1.5, ajax is implemented as a deferred object. ● Models CRUD support deferred operation. ● $.fixture ○ Create a deferred instead of sending XMLHttpRequest to the server, but to the function you preferred.
  • 31. Form operation ● Using formParams(), retrieve data from a form is easier. ● You do not to collect value one by one input.
  • 32. The end? ● No, you will face problems if you want to start building a large web application using javascriptMVC. ● So how could I organize my application?
  • 33. Next Topic: ● Let's rock on JavascriptMVC ○ How to start coding with JavascriptMVC? ○ What JavascriptMVC document lacks ○ A framework based on JavascriptMVC ○ Some common rules. ○ An example
  • 34. Javascript is beautiful. Let's use it to get the world better.