SlideShare ist ein Scribd-Unternehmen logo
1 von 34
Downloaden Sie, um offline zu lesen
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.

Weitere ähnliche Inhalte

Was ist angesagt?

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
 

Was ist angesagt? (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
 

Andere mochten auch

#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
 

Andere mochten auch (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
 

Ähnlich wie 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
 

Ähnlich wie 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
 

Kürzlich hochgeladen

Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
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
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024Results
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024The Digital Insurer
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
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
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
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
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
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
 
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
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Paola De la Torre
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 

Kürzlich hochgeladen (20)

Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
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...
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
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
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
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
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
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
 
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
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 

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.