Developing Backbone.js Applications - Helion
ISBN: 978-14-493-2855-9
stron: 374, Format: ebook
Data wydania: 2013-05-10
Księgarnia: Helion
Cena książki: 143,65 zł (poprzednio: 167,03 zł)
Oszczędzasz: 14% (-23,38 zł)
If you want to build your site’s frontend with the single-page application (SPA) model, this hands-on book shows you how to get the job done with Backbone.js. You’ll learn how to create structured JavaScript applications, using Backbone’s own flavor of model-view-controller (MVC) architecture.
Start with the basics of MVC, SPA, and Backbone, then get your hands dirty building sample applications—a simple Todo list app, a RESTful book library app, and a modular app with Backbone and RequireJS. Author Addy Osmani, an engineer for Google’s Chrome team, also demonstrates advanced uses of the framework.
- Learn how Backbone.js brings MVC benefits to the client-side
- Write code that can be easily read, structured, and extended
- Work with the Backbone.Marionette and Thorax extension frameworks
- Solve common problems you’ll encounter when using Backbone.js
- Organize your code into modules with AMD and RequireJS
- Paginate data for your Collections with the Backbone.Paginator plugin
- Bootstrap a new Backbone.js application with boilerplate code
- Use Backbone with jQuery Mobile and resolve routing problems between the two
- Unit-test your Backbone apps with Jasmine, QUnit, and SinonJS
Osoby które kupowały "Developing Backbone.js Applications", wybierały także:
- Windows Media Center. Domowe centrum rozrywki 66,67 zł, (8,00 zł -88%)
- Ruby on Rails. Ćwiczenia 18,75 zł, (3,00 zł -84%)
- Przywództwo w świecie VUCA. Jak być skutecznym liderem w niepewnym środowisku 58,64 zł, (12,90 zł -78%)
- Scrum. O zwinnym zarządzaniu projektami. Wydanie II rozszerzone 58,64 zł, (12,90 zł -78%)
- Od hierarchii do turkusu, czyli jak zarządzać w XXI wieku 58,64 zł, (12,90 zł -78%)
Spis treści
Developing Backbone.js Applications. Building Better JavaScript Applications eBook -- spis treści
- Developing Backbone.js Applications
- Preface
- Target Audience
- Credits
- Reading
- Conventions Used in This Book
- Using Code Examples
- Safari Books Online
- How to Contact Us
- Acknowledgments
- 1. Introduction
- What Is MVC?
- What Is Backbone.js?
- When Do I Need a JavaScript MVC Framework?
- Why Consider Backbone.js?
- Setting Expectations
- 2. Fundamentals
- MVC
- Smalltalk-80 MVC
- MVC Applied to the Web
- Client-Side MVC and Single-Page Apps
- Client-Side MVC: Backbone Style
- Implementation Specifics
- Models
- Views
- Templating
- Handlebars.js
- Underscore.js microtemplates
- Controllers
- What Does MVC Give Us?
- Delving Deeper into MVC
- Summary
- Further Reading
- Fast Facts
- Backbone.js
- Used by
- MVC
- 3. Backbone Basics
- Getting Set Up
- Models
- Initialization
- Default values
- Getters and Setters
- Model.get()
- Model.set()
- Direct access
- Listening for Changes to Your Model
- Validation
- Initialization
- Views
- Creating New Views
- What Is el?
- $el and $()
- setElement
- Understanding render()
- The events hash
- Collections
- Adding and Removing Models
- Retrieving Models
- Listening for Events
- Resetting/Refreshing Collections
- Underscore Utility Functions
- forEach: Iterate over collections
- sortBy(): Sort a collection on a specific attribute
- map(): Create a new collection by mapping each value in a list through a transformation function
- min()/max(): Retrieve item with the min or max value of an attribute
- pluck(): Extract a specific attribute
- filter(): Filter a collection
- indexOf(): Return the item at a particular index within a collection
- any() : Confirm if any of the values in a collection pass an iterator truth test
- size(): Return the size of a collection
- isEmpty(): Determine whether a collection is empty
- groupBy(): Group a collection into groups like items
- pick(): Extract a set of attributes from a model
- omit(): Extract all attributes from a model except those listed
- keys() and values(): Get lists of attribute names and values
- pairs(): Get list of attributes as [key, value] pairs
- invert(): Create object in which the values are keys and the attributes are values
- Chainable API
- RESTful Persistence
- Fetching Models from the Server
- Saving Models to the Server
- Deleting Models from the Server
- Options
- Events
- on(), off(), and trigger()
- listenTo() and stopListening()
- Events and Views
- Routers
- Backbone.history
- Backbones Sync API
- Overriding Backbone.sync
- Dependencies
- Summary
- 4. Exercise 1: TodosYour First Backbone.js App
- Static HTML
- Header and Scripts
- Application HTML
- Templates
- Todo Model
- Todo Collection
- Application View
- Individual TodoView
- Startup
- In Action
- Completing and Deleting Todos
- Todo Routing
- Summary
- Static HTML
- 5. Exercise 2: Book LibraryYour First RESTful Backbone.js App
- Setting Up
- Creating the Model, Collection, Views, and App
- Wiring in the Interface
- Adding Models
- Removing Models
- Creating the Backend
- Install Node.js, npm, and MongoDB
- Install Node Modules
- Create a Simple Web Server
- Connect to the Database
- Talking to the Server
- Summary
- Setting Up
- 6. Backbone Extensions
- MarionetteJS (Backbone.Marionette)
- Boilerplate Rendering Code
- Reducing Boilerplate with Marionette.ItemView
- Memory Management
- Region Management
- Marionette Todo App
- TodoMVC.js
- TodoMVC.Layout.js
- TodoMVC.TodoList.js
- Controllers
- CompositeView
- TodoMVC.TodoList.Views.js
- Todos.js
- Is the Marionette Implementation of the Todo App More Maintainable?
- Marionette and Flexibility
- And So Much More
- Thorax
- Hello World
- Embedding Child Views
- View Helpers
- collection Helper
- Custom HTML Data Attributes
- Thorax Resources
- Summary
- MarionetteJS (Backbone.Marionette)
- 7. Common Problems and Solutions
- Working with Nested Views
- Problem
- Solution 1
- Solution 2
- Solution 3
- Solution 4
- Managing Models in Nested Views
- Problem
- Solution
- Rendering a Parent View from a Child View
- Problem
- Solution
- Disposing View Hierarchies
- Problem
- Solution
- Rendering View Hierarchies
- Problem
- Solution
- Working with Nested Models or Collections
- Problem
- Solution
- Better Model Property Validation
- Problem
- Solution
- Backbone.validateAll
- Backbone.Validation
- Form-Specific Validation Classes
- Avoiding Conflicts with Multiple Backbone Versions
- Problem
- Solution
- Building Model and View Hierarchies
- Problem
- Solution
- Calling Overridden Methods
- Backbone-Super
- Event Aggregators and Mediators
- Problem
- Solution
- Event Aggregator
- Backbones event aggregator
- jQuerys event aggregator
- Mediator
- A mediator for Backbone
- Similarities and Differences
- Events
- Third-party objects
- Relationships: When to Use Which
- Event aggregator use
- Mediator use
- Event Aggregator and Mediator Together
- Pattern Language: Semantics
- Working with Nested Views
- 8. Modular Development
- Organizing Modules with RequireJS and AMD
- Maintainability Problems with Multiple Script Files
- Need for Better Dependency Management
- Asynchronous Module Definition (AMD)
- Writing AMD Modules with RequireJS
- Alternate syntax
- Getting Started with RequireJS
- RequireJS configuration
- RequireJS Shims
- Custom paths
- RequireJS configuration
- Require.js and Backbone Examples
- Wrapping models, views, and other components with AMD
- Keeping Your Templates External Using RequireJS and the Text Plug-in
- Optimizing Backbone Apps for Production with the RequireJS Optimizer
- Summary
- Organizing Modules with RequireJS and AMD
- 9. Exercise 3: Your First Modular Backbone and RequireJS App
- Overview
- Markup
- Configuration Options
- Modularizing Our Models, Views, and Collections
- Route-Based Module Loading
- JSON-Based Module Configuration
- Module Loader Router
- Using NodeJS to Handle pushState
- An Asset Package Alternative for Dependency Management
- 10. Paginating Backbone.js Requests and Collections
- Backbone.Paginator
- Live Examples
- Paginator.requestPager
- Convenience Methods
- Paginator.clientPager
- Convenience Methods
- Implementation Notes
- Plug-ins
- Bootstrapping
- Styling
- Summary
- Backbone.Paginator
- 11. Backbone Boilerplate and Grunt-BBB
- Getting Started
- Creating a New Project
- index.html
- config.js
- main.js
- app.js
- Creating Backbone Boilerplate Modules
- router.js
- Other Useful Tools and Projects
- Yeoman
- Backbone DevTools
- Summary
- 12. Backbone and jQuery Mobile
- Mobile App Development with jQuery Mobile
- The Principle of Progressive Widget Enhancement by jQMobile
- Understanding jQuery Mobile Navigation
- Basic Backbone App Setup for jQuery Mobile
- Workflow with Backbone and jQueryMobile
- Routing to a Concrete View Page, Inheriting from BasicView
- Management of Mobile Page Templates
- DOM Management and $.mobile.changePage
- Applying Advanced jQM Techniques to Backbone
- Dynamic DOM Scripting
- Intercepting jQuery Mobile Events
- Performance
- Clever Multiplatform Support Management
- Mobile App Development with jQuery Mobile
- 13. Jasmine
- Behavior-Driven Development
- Suites, Specs, and Spies
- beforeEach() and afterEach()
- Shared Scope
- Getting Set Up
- TDD with Backbone
- Models
- Collections
- Views
- View Testing
- Initial setup
- View rendering
- Rendering with a templating system
- View Testing
- Exercise
- Further Reading
- Summary
- 14. QUnit
- Getting Set Up
- Sample HTML with QUnit-Compatible Markup
- Assertions
- Basic Test Case Using test( name, callback )
- Comparing the Actual Output of a Function Against the Expected Output
- Adding Structure to Assertions
- Basic QUnit Modules
- Using setup() and teardown()
- Using setup() and teardown() for Instantiation and Clean Up
- Assertion Examples
- Fixtures
- Fixtures Example
- Asynchronous Code
- Getting Set Up
- 15. SinonJS
- What Is SinonJS?
- Basic Spies
- Spying on Existing Functions
- Inspection Interface
- Matching arguments: Test that a spy was called with a specific set of arguments
- Stricter argument matching: Test that a spy was called at least once with specific arguments and no others
- Testing call order: Test that a spy was called before or after another spy
- Match execution counts: Test that a spy was called a specific number of times
- Stubs and Mocks
- Stubs
- Mocks
- Exercise
- Models
- Collections
- Views
- App
- Further Reading and Resources
- What Is SinonJS?
- 16. Conclusions
- A. Further Learning
- A Simple JavaScript MVC Implementation
- Event System
- Models
- Views
- Controllers
- Practical Usage
- MVP
- Models, Views, and Presenters
- MVP or MVC?
- MVC, MVP, and Backbone.js
- Namespacing
- What Is Namespacing?
- Single global variables
- Object literals
- Nested namespacing
- What Does DocumentCloud Use?
- Recommendation
- What Is Namespacing?
- Backbone Dependency Details
- DOM Manipulation
- Utilities
- RESTful Persistence
- Routing
- Backbone Versus Other Libraries and Frameworks
- A Simple JavaScript MVC Implementation
- B. Resources
- Books and Courses
- Extensions/Libraries
- Index
- About the Author
- Colophon
- Copyright