- Fix template field iteration logic - 4ae5cf1
- #389 - Performance optimations (@kpdecker)
- #390 - Deferrable render (@kpdecker)
- #388 - Utilize lodash for server builds (@kpdecker)
- Avoid complex boolean chaining - 56a8b25
- Implement basic benchmarks - 2f2fcde
Compatibility notes:
setViewcallers can not assume that the operation has completed after the call returns unless they pass theasync: falseflag.rendered:collectionnow occurs prior to therenderedeventappendandbefore:renderedevents can not assume that other handlers have executed prior to their own execution unless they utilize thedeferred.execAPI which does guarantee this case (although the existing concerns of did you register before the other guy hold and this is generally ill advised to make these assumptions in loosely linked event code).- Users building with lumbar who desire the forms feature must include the thorax-form mixin
- The
helper:$nameevent has been removed. Users should bind to thehelperevent and check the name parameter that they wish to examine. _.uniqueIdno longer uses global variables for tracking state. Instead callers must call_resetIdCounterwhen wishing to modify that behavior.contextno longer clones the model attributes so callers need to take care to not modify the returned value.
- #382 - Update DOM events (@loun4)
- #383 - Allow forced render mode for restore operations (@kpdecker)
- Safely handle missing view helpers on restore - 2009cd2
- Update to use FruitLoops API object - 5253fd1
- Fixup restore handling with custom renderEmpty - 630a098
- #375 - collection.fetch success callback (@DatenMetzgerX)
- #373 - Handle fetchQueue error for preempted requests (@kpdecker)
- Ensure proper restore for nested collections - 6799e57
Compatibility notes:
fetchQueuepromises are now proxies to the upstream XHR connection. The consequence of this is the fetch queue instance may be cancelled or otherwise errored while the upstream request continues independently.
- #372 - Isolate fetchQueue instances (@kpdecker)
- Use callbacks as exec flags in bindToRoute - 18f16de
Compatibility notes:
- Multiple calls to fetch and load are now treated as distinct request objects externally. This means that they may be independendently canceled by things such as bind to route, etc without impacting other external requests. Implementations may need to examine the cases where fetch vs. load is used concurrently on a given data object instance to see if their behavior still matches the desired behavior.
- Fix bindToRoute when running with lumbar loader - c1e534d
- Update for latest handlebars _child changes - 495e078
- #311 - Loading module breaks module load if history not started (@kpdecker)
- #370 - Always cleanup bindToRoute (@kpdecker)
- Fix server-side.js include for client overrides - 66a972b
- #358 - Add as a child before calling ensureRender in CollectionView#appendItem (@jasonwebster)
- #364 - Add view.register method (@kpdecker)
Compatibility notes:
- Views that are inserted manually must call
retainor_addChildif they are going to be referenced by$.view
- #357 - use
proprather thanattrto look up values, as it updates after user (@patrickkettner) - Update tests for the latest fruit-loops lib - 18333f1
- Prevent partial render due to layout children - 395cac9
- Cleanup parent registry on view cid change - b468974
- Only restore flagged el attribute lookups - e4440f0
-
#350 - Defer restore rerendering in collection if loading (@kpdecker)
-
#88 - Make unit tests run on IE8 (@eastridge)
-
#331 - Use empty() and html() rather than innerHTML (@kpdecker)
-
#332 - LayoutView will unbind all DOM events when deactivating a retained view (@jasonwebster)
-
#335 - Do not activate push state links if meta or shift are clicked. (@nhunzaker)
-
Fix loadHandler cleanup under oldIE - bd30512
-
Handle functions passed to getTemplate - 62c38a8
-
Handle oldIE default checkbox value - 04293ca
Compatibility notes:
- Service side rendering support has been implemented. This is generally isolated but does expose the
$serverSideglobal field and a few additional data parameters, documented in the readme. appendevent callbacks now recieve $ instances rather than direct DOM references- cid values on views may change now due to restore operations
- thorax-ie mixin is removed
- #326 - Fix IE version of CollectionView._replaceHTML (@Candid)
- #324 - Add view({el}) lookup option (@kpdecker)
- #323 - Remove
data-submit-waitattr from view el when resetting submit state (@jasonwebster)
Compatibility notes:
- Layout and collection elements are now cached locally. Nonstandard rendering behaviors may break due to this.
- #318 - remove extra word under setModel section (@joeyyang)
- #313 - Correct spelling mistake (@Maciek416)
- #312 - Always return 'this' from Thorax.View.render(). (@ryan-roemer)
- #308 - Add support for data-no-tap-highlight attribute (@Candid)
- Update build stack to latest - cffbddc
- Ignore new handlebars data fields for comparison - 34fa9d7
- Slight refactor of helper view init - 9f23d56
Compatibility notes:
- This version is required in order to work with the Handlebars 2.x series. In particular 34fa9d7 is needed to prevent infinite rerender loops under certain cases.
- #297 - Fix for issue #296 (@solidgoldpig)
- #298 - IE11 fails 2 view helper tests (@solidgoldpig)
- #299 - IE11 - on test fails for Zepto version (@solidgoldpig)
- #303 - Hack around JIT error in collection view (@kpdecker)
- #295 - Error Handler Section APIs (@kpdecker)
- #288 - encode output of url helper when using expand-tokens=true (@trombom)
- Handle void tags properly in Thorax.Util.tag - 344e5d5
- Add support for promises - cab2eb0
- #292 - Add a Bitdeli Badge to README (@bitdeli-chef)
- #291 - Add support for input event (@Candid)
- #227 - support backbone's idAttribute
- Update build task to remove source maps (for components repo only) - e467408
- Simplify conditional - 0a68c99
- Save off collection reference - 03f1703
- Failover url to empty string - 2427b8a
Compatibility notes:
- TODO : What might have broken?
- #286 - Update Thorax for Backbone 1.1 (@eastridge)
- #285 - Spelling fixes in the README. (@carsonmcdonald)
- #261 - Investigate Backbone 1.1 impact
- #274 - Docs on helpers incomplete
-
#276 - Leaking views (@dr-nafanya)
-
Add view toString method - c096927
-
#275 - HelperView in {{layout-element}} error
-
Replace release-component with component-version (courtesy kpdecker) - e51ebf3
-
Update collection.js - 5c69497
-
Update README.md - 255a604, 76b1d39, b3a12ae, 7a7e5d2
-
Add log messages for writing source maps - e049613
- Handle destroyed helper view insert explicitly - c70d4dc
- #268 - Remove dependencies from bower.json (@eastridge)
Compatibility notes:
You will now need to add your own Underscore, Handlebars, Backbone and jQuery or Zepto dependencies in projects that consume Thorax. Thorax is tested with the following Bower config:
"devDependencies": {
"jquery": "1.9.0",
"underscore": "1.4.4",
"zepto": "1.0.0",
"handlebars": "1.0.0",
"backbone": "1.0.0"
}
Note that you should pick jQuery or Zepto for your project but not both.
- #267 - Return view in existing case from _addChild. (@ryan-roemer)
- #255 - View helper fails when run via mutating array (@kpdecker)
- #263 - Make setView not throw even if old view is destroyed (@Candid)
- #264 - Make
rendernot render destroyed views (@Candid)
-
#248 - load bug fix with forwardLoadEvents while already loading (@jhudson8
-
#239 - bower: dependencies -> 'latest'
-
Update release notes format - a43e1b0
- Numerous performance and bug fixes
- Thorax now requires Backbone 0.9.9 or later
- The "auto unbind" feature of
on(targetObject, eventName)has been removed, implemented by Backbone aslistenTo - Use of
Thorax.Routeris deprecated and no longer documented - Removed
ViewControllerclass - Views can now specify a
helpershash to call templates with - Removed Thorax.Util.getValue
renderTemplatesecondcontextargument now overrides context passed to template instead of adding to itreadyevent now propagates to children- Added
view.appendTomethod - Added
bindDataObject,unbindDataObjectmethods - Added
thorax releasecommand to generate combined & minified files - New lumbar based build system,
thorax buildcommand line option has been removed - Add
removeItemupdateItemmethods for views rendering a collection - Remove
emptyContextmethod andempty-contextcollection helper argument - Add {{collection-element}} helper, to specify where in a view a collection should be rendered
CollectionViewhas been removed, collection rendering can now be done in any class- Added
itemFiltermethod - Move
{{cid}},{{yield}}special variables to private variables in handlebars (available with{{@cid}}and{{@yield}}).{{_view}}is now avialable as{{@view}} - Collection events bound with
on({collection: events})no longer recieve aCollectionViewas the first argument - Revert: DOM event handlers now recieve the original context (if the handler had been registered with $.on) as the second argument
expand-tokens=trueis now required in theurlhelper to expand handlebars tokens inside a url- Added
loading-placementoption to thecollection-helper - DOM event handlers now recieve the original context (if the handler had been registered with $.on) as the second argument
- Added bower support
- Add
triggerattribute option to button and link helpers - Fail silently when #view helper does not find a view instance (1.x behavior)
$.modelnow accepts a view as an optional argumentThorax.View.prototype._loadTemplaterenamed toThorax.Util.getTemplate
- add
templatehelper block capture andyieldvariable - added
Thorax.onExceptionhook for easier android debugging - collection
filteroption now hides or shows elements instead of adding or removing them - collection
filteroption now applied when model change event is triggered - collection event change: when using view.on({collection: events}) syntax,
CollectionViewinstances are now prepended to the array of arguments passed and the callback is now called with the context of the delcaring view - allowed creation of
CollectionViewclasses in JavaScript direclty (previously could only be created via the collection helper) Thorax.RouterandThorax.ViewControllernow use a constructor override so that super.initialize() does not need to be invoked when overridinginitialize
- added mobile plugin
- allow nested objects in any registry to allow: {{view "Nested.Object"}}
thorax buildcommand now requires a target filename as the first argumentThorax.Util.shouldFetchwill now gracefully support Backbone.Model and Backbone.Collection instances- allow Backbone.Model and Backbone.Collection instances to be passed to
_loadModeland_loadCollection
item-contextandempty-contextwill try to useitemContextandemptyContextfunctions as defaults if they are available on the declaring view- a build system was created, some method overrides are now done via code templates with handlebars instead of in JS, resulting in smaller wire size and less computational overhead
- added
buildcommand - thorax.lumbar plugin was removed, functionality was moved to boilerplate projects
Applicationclass was removed, functionality was moved to boilerplate projects- registry methods (
Thorax.view,Thorax.model, etc) were removed,nameproperty now has special meaning when passed toextendmethods such asThorax.View.extend
Thorax has been split into a variety of plugins for a better separation of concerns, the base thorax.js file now only deals with Backbone + Handlebars integration.
-
template has been renamed to renderTemplate
-
templates may now be specified as part of the class definition as a string via the
templateattribute -
Thorax.configure() has been removed and repalced with an Application class, the equivelent code would be:
var Application = new Thorax.Application(); Application.start(historyOptions); $('body').append(Application.el);
-
scrollTo and scrollToTop have been removed and will appear in the mobile plugin in 2.1
-
Handlebars.registerViewHelper has been added.
empty,collectionand other view helpers are all implemented in this manner -
addition of
$.view, $ .model and $.collection
Mixin behaviors have been moved to the mixin plugin.
All data loading functionality, including flushQueue, fetchQueue, bindToRoute and load() have been moved into a separate thorax.loading.js file. In addition the collection helper accepts two new arguments when this file is present:
- loading-view
- loading-template
Which insert a loading view or template onto the bottom of the collection while the collection is loading. A loading helper is also provided that can be used outside of the collection helper.
The signatures of exisiting methods were not changed and the unit tests for existing functionality were only trivially changed.
- Thorax.View.registerEvents has been renamed to Thorax.View.on and is available on all Backbone and Thorax classes
- Any object that can be used as the Thorax.View.prototype.events object may now be used as an argument to on()
- The nested event keyword has gone away and will re-appear (or have a different implementation accomplishing the same thing) in 2.1
- All view events regardless of how they are registered will now be processed with _addEvent who's signature is unchanged
- Events to be bound on another object only while the view is alive may be registered with: view.on(target, eventName, callback) When the view is destroyed the event on the target object will be unbound.
serialize, populate and validateInput have been moved into a form plugin but are unchanged
Added link, url and button helpers.
Previously all click a events would trigger the Backbone.history.navigate behavior. This is now opt in via the link helper.
Collection handling has been completely re-written and is not backwards compatible. The new collection helper must be used. Multiple collections and multiple displays of the same collection may now be present in the same view. Each collection helper will generate a CollectionViewinstance. Specific migrations:
- item-context may be specified in the collection helper instead of setting an itemContext method on the view class
- empty-context may be specified in the collection helper instead of setting an emptyContext method on the view class
- rendered:collection event recieves the related collectionView as it's first argument
- rendered:item event recieves the related collectionView as it's first argument
- rendered:empty event recieves the related collectionView as it's first argument
- renderItem no longer exists on the view class, use the rendered:item event or specify specific behaviors in your item-view class
- renderEmpty no longer exists on the view class, use the rendered:empty event or specify specific behaviors in your empty-view class
- the filter option has been added which should be used in place of the behavior added in https://github.com/walmartlabs/thorax/pull/43/files
A lumbar plugin has been added which adds a module.router() method to each lumbar generated module. The Thorax + Lumbar node boilerplate project makes use of this:
https://github.com/walmartlabs/thorax-boilerplate/tree/master/thorax-node
Thorax.Model and setModel have been moved to the model plugin but are unchanged in behavior.
Thorax.Layouthas been renamed toThorax.LayoutView. It is now aThorax.Viewsubclass instead of aBackbone.View. MultipleLayoutViewinstances may now be embedded in a parent view.setViewhas gained adestroy: falseoptionlayout.getView()must be used to get the current view of a layout instead oflayout.viewThorax.ViewControllerandThorax.Applicationclasses have been addedrouteandroute:beforeevents have been added toThorax.Router
Have been removed, except for the following command:
thorax templates ./templates-dir ./templates.js
Boilerplate projects have been provided and a lumbar.json editor will appear in 2.1
- load:start and load:end handling have been moved into a plugin
- nested event keyword now works with views, the callback will always be called with the context of the declaring view and will always recieve the triggering view as the first argument
- empty() the collection element before renderCollection()
- added {{collection}} helper
- _collectionSelector is now deprecated and internally defaults to [data-collection-cid], for backwards compatibility set it to ".collection" in your view classes
- added templatePathPrefix option to configure()
- unit tests!
- added nested event keyword
- added _addEvent method for subclasses to customize event registration
- registerEvents is now an instance method in addition to a class method
- added emptyContext method, called from renderEmpty
- checks for view.name property are now lazy
- exceptions are now thrown instead of using console.error