the great John Yanarella Open source (MIT) Full test suite (using Jasmine) JavaScript and CoffeeScript implementations Essential extensions for enterprise web and mobile application development with Ext JS and Sencha Touch. deftjs.org github.com/deftjs/DeftJS @deftjs on Twitter Has a sweet logo! Thursday, April 19, 12
Ext JS API syntax conventions. Simplicity Eliminates boilerplate code Testability Promotes loose coupling through class annotation driven dependency injection. Extensibility Takes advantage of extend and mixins Reusability Enables business layer code reuse between Ext JS and Sencha Touch applications. Thursday, April 19, 12
annotation driven dependency injection. Maps dependencies by user-defined identifiers. Resolves dependencies by class instance, factory function or value. Supports singleton and prototype resolution of class instance and factory function dependencies. Offers eager and lazy instantiation of dependencies. Injects dependencies into Ext JS class configs and properties before the class constructor is executed. Thursday, April 19, 12
Provides class annotation driven association between a given view and its view controller. Clarifies the role of the controller - i.e. controlling a view and delegating work to injected business services (ex. Stores). Supports multiple independent instances of a given view, each with their own view controller instance. Reduces memory usage by automatically creating and destroying view controllers in tandem with their associated views. Supports concise configuration for referencing view components and registering event listeners with view controller methods. Integrates with the view destruction lifecycle to allow the view controller to potentially cancel removal and destruction. Simplifies clean-up by automatically removing view and view component references and event listeners. Thursday, April 19, 12
an elegant way to represent a ‘future value’ resulting from an asynchronous operation. Offers a consistent, readable API for registering success, failure, cancellation or progress callbacks. Allows chaining of transformation and processing of future values. Simplifies processing of a set of future values via utility functions including all(), any(), map() and reduce(). Implements the CommonJS Promises/A specification. Thursday, April 19, 12
or config name to inject in to Ext.define( 'MyApp.manager.ContactManager', { extend: 'MyApp.manager.AbstractManager', mixins: [ 'Deft.mixin.Injectable' ], inject: { store: 'contactStore' }, ... }); Thursday, April 19, 12
your view Ext.define( 'MyApp.view.ContactsView', { extend: 'Ext.panel.Panel', mixins: [ 'Deft.mixin.Controllable' ], controller: 'MyApp.controller.ContactsViewController' ... }); View must extend Ext.Component or things will blow up Thursday, April 19, 12
Ext.define( 'MyApp.controller.ContactsViewController', { extend: 'Deft.mvc.ViewController', ... control: { // indicates the Button in the view has an itemId of 'submitButton' submitButton: true, ... } }); Alternatively, use itemId Thursday, April 19, 12
Ext.define( 'MyApp.controller.ContactsViewController', { extend: 'Deft.mvc.ViewController', ... control: { ... } ... init: function() { // all accessors will have been created // all event listeners will have been added return this.callParent( arguments ); } }); For ExtJS called after view dispatches “afterrender” event For Sencha called after view dispatches “initiallize” event Thursday, April 19, 12
progress) Forum (in progress) FAQ Example Ext JS and Sencha Touch applications Routing Navigation - support for hierarchical views, route-aware AOP with an Ext JS-style API (i.e. JSON style configuration) Occasionally-Connected Store (simplifing online / offline capabilities) Thursday, April 19, 12