marionette-rails 1.0.0.rc3 → 1.0.0.rc4
Sign up to get free protection for your applications and to get access to all the features.
- data/vendor/assets/javascripts/backbone.marionette.js +30 -101
- metadata +1 -1
@@ -1,4 +1,4 @@
|
|
1
|
-
// Backbone.Marionette, v1.0.0-
|
1
|
+
// Backbone.Marionette, v1.0.0-rc4
|
2
2
|
// Copyright (c)2013 Derick Bailey, Muted Solutions, LLC.
|
3
3
|
// Distributed under MIT license
|
4
4
|
// http://github.com/marionettejs/backbone.marionette
|
@@ -207,12 +207,12 @@ Backbone.ChildViewContainer = (function(Backbone, _){
|
|
207
207
|
return Container;
|
208
208
|
})(Backbone, _);
|
209
209
|
|
210
|
-
// Backbone.Wreqr, v0.
|
211
|
-
// Copyright (c)
|
210
|
+
// Backbone.Wreqr, v0.1.1
|
211
|
+
// Copyright (c)2013 Derick Bailey, Muted Solutions, LLC.
|
212
212
|
// Distributed under MIT license
|
213
213
|
// http://github.com/marionettejs/backbone.wreqr
|
214
214
|
Backbone.Wreqr = (function(Backbone, Marionette, _){
|
215
|
-
"
|
215
|
+
"use strict";
|
216
216
|
var Wreqr = {};
|
217
217
|
|
218
218
|
// Handlers
|
@@ -220,13 +220,12 @@ Backbone.Wreqr = (function(Backbone, Marionette, _){
|
|
220
220
|
// A registry of functions to call, given a name
|
221
221
|
|
222
222
|
Wreqr.Handlers = (function(Backbone, _){
|
223
|
-
"
|
223
|
+
"use strict";
|
224
224
|
|
225
225
|
// Constructor
|
226
226
|
// -----------
|
227
227
|
|
228
228
|
var Handlers = function(){
|
229
|
-
"use strict";
|
230
229
|
this._handlers = {};
|
231
230
|
};
|
232
231
|
|
@@ -284,7 +283,7 @@ Backbone.Wreqr = (function(Backbone, Marionette, _){
|
|
284
283
|
// A simple command pattern implementation. Register a command
|
285
284
|
// handler and execute it.
|
286
285
|
Wreqr.Commands = (function(Wreqr){
|
287
|
-
"
|
286
|
+
"use strict";
|
288
287
|
|
289
288
|
return Wreqr.Handlers.extend({
|
290
289
|
execute: function(){
|
@@ -303,7 +302,7 @@ Backbone.Wreqr = (function(Backbone, Marionette, _){
|
|
303
302
|
// A simple request/response implementation. Register a
|
304
303
|
// request handler, and return a response from it
|
305
304
|
Wreqr.RequestResponse = (function(Wreqr){
|
306
|
-
"
|
305
|
+
"use strict";
|
307
306
|
|
308
307
|
return Wreqr.Handlers.extend({
|
309
308
|
request: function(){
|
@@ -322,32 +321,16 @@ Backbone.Wreqr = (function(Backbone, Marionette, _){
|
|
322
321
|
// of an application through event-driven architecture.
|
323
322
|
|
324
323
|
Wreqr.EventAggregator = (function(Backbone, _){
|
324
|
+
"use strict";
|
325
|
+
var EA = function(){};
|
325
326
|
|
326
|
-
//
|
327
|
-
|
327
|
+
// Copy the `extend` function used by Backbone's classes
|
328
|
+
EA.extend = Backbone.Model.extend;
|
328
329
|
|
329
|
-
//
|
330
|
-
|
331
|
-
context = context || obj;
|
332
|
-
return listenTo.call(obj, evtSource, events, _.bind(callback, context));
|
333
|
-
}
|
330
|
+
// Copy the basic Backbone.Events on to the event aggregator
|
331
|
+
_.extend(EA.prototype, Backbone.Events);
|
334
332
|
|
335
|
-
|
336
|
-
function EventAggregator(){}
|
337
|
-
|
338
|
-
// Mix Backbone.Events in to it
|
339
|
-
_.extend(EventAggregator.prototype, Backbone.Events, {
|
340
|
-
// Override the listenTo so that we can have a version that
|
341
|
-
// correctly binds context
|
342
|
-
listenTo: function(evtSource, events, callback, context){
|
343
|
-
return contextBoundListenTo(this, evtSource, events, callback, context);
|
344
|
-
}
|
345
|
-
});
|
346
|
-
|
347
|
-
// Allow it to be extended
|
348
|
-
EventAggregator.extend = Backbone.Model.extend;
|
349
|
-
|
350
|
-
return EventAggregator;
|
333
|
+
return EA;
|
351
334
|
})(Backbone, _);
|
352
335
|
|
353
336
|
|
@@ -381,7 +364,7 @@ Marionette.getOption = function(target, optionName){
|
|
381
364
|
if (!target || !optionName){ return; }
|
382
365
|
var value;
|
383
366
|
|
384
|
-
if (target.options && target.options[optionName]){
|
367
|
+
if (target.options && (optionName in target.options) && (target.options[optionName] !== undefined)){
|
385
368
|
value = target.options[optionName];
|
386
369
|
} else {
|
387
370
|
value = target[optionName];
|
@@ -509,56 +492,6 @@ Marionette.MonitorDOMRefresh = (function(){
|
|
509
492
|
})();
|
510
493
|
|
511
494
|
|
512
|
-
// addEventBinder
|
513
|
-
// --------------
|
514
|
-
//
|
515
|
-
// Mixes in Backbone.Events to the target object, if it is not present
|
516
|
-
// already. Also adjusts the listenTo method to accept a 4th parameter
|
517
|
-
// for the callback context.
|
518
|
-
|
519
|
-
(function(Backbone, Marionette, _){
|
520
|
-
|
521
|
-
// grab a reference to the original listenTo
|
522
|
-
var listenTo = Backbone.Events.listenTo;
|
523
|
-
|
524
|
-
// Fix the listenTo method on the target object, allowing the 4th
|
525
|
-
// context parameter to be specified
|
526
|
-
Marionette.addEventBinder = function(target){
|
527
|
-
// If the target is not already extending Backbone.Events,
|
528
|
-
// then extend that on to it first
|
529
|
-
if (!target.on && !target.off && !target.listenTo && !target.stopListening){
|
530
|
-
_.extend(target, Backbone.Events);
|
531
|
-
}
|
532
|
-
|
533
|
-
// Override the built-in listenTo method to make sure we
|
534
|
-
// account for context
|
535
|
-
target.listenTo = function(evtSource, events, callback, context){
|
536
|
-
context = context || this;
|
537
|
-
return listenTo.call(this, evtSource, events, _.bind(callback, context));
|
538
|
-
};
|
539
|
-
};
|
540
|
-
|
541
|
-
})(Backbone, Marionette, _);
|
542
|
-
|
543
|
-
|
544
|
-
// Event Aggregator
|
545
|
-
// ----------------
|
546
|
-
// A pub-sub object that can be used to decouple various parts
|
547
|
-
// of an application through event-driven architecture.
|
548
|
-
//
|
549
|
-
// Extends [Backbone.Wreqr.EventAggregator](https://github.com/marionettejs/backbone.wreqr)
|
550
|
-
// and mixes in an EventBinder from [Backbone.EventBinder](https://github.com/marionettejs/backbone.eventbinder).
|
551
|
-
Marionette.EventAggregator = Backbone.Wreqr.EventAggregator.extend({
|
552
|
-
|
553
|
-
constructor: function(){
|
554
|
-
Marionette.addEventBinder(this);
|
555
|
-
|
556
|
-
var args = Array.prototype.slice.apply(arguments);
|
557
|
-
Backbone.Wreqr.EventAggregator.prototype.constructor.apply(this, args);
|
558
|
-
}
|
559
|
-
|
560
|
-
});
|
561
|
-
|
562
495
|
// Marionette.bindEntityEvents & unbindEntityEvents
|
563
496
|
// ---------------------------
|
564
497
|
//
|
@@ -707,8 +640,6 @@ Marionette.Controller = function(options){
|
|
707
640
|
this.triggerMethod = Marionette.triggerMethod;
|
708
641
|
this.options = options || {};
|
709
642
|
|
710
|
-
Marionette.addEventBinder(this);
|
711
|
-
|
712
643
|
if (_.isFunction(this.initialize)){
|
713
644
|
this.initialize(this.options);
|
714
645
|
}
|
@@ -737,8 +668,6 @@ _.extend(Marionette.Controller.prototype, Backbone.Events, {
|
|
737
668
|
Marionette.Region = function(options){
|
738
669
|
this.options = options || {};
|
739
670
|
|
740
|
-
Marionette.addEventBinder(this);
|
741
|
-
|
742
671
|
this.el = Marionette.getOption(this, "el");
|
743
672
|
|
744
673
|
if (!this.el){
|
@@ -953,7 +882,7 @@ _.extend(Marionette.TemplateCache, {
|
|
953
882
|
// and know whether or not it has been loaded
|
954
883
|
_.extend(Marionette.TemplateCache.prototype, {
|
955
884
|
|
956
|
-
// Internal method to load the template
|
885
|
+
// Internal method to load the template
|
957
886
|
load: function(){
|
958
887
|
var that = this;
|
959
888
|
|
@@ -970,8 +899,10 @@ _.extend(Marionette.TemplateCache.prototype, {
|
|
970
899
|
},
|
971
900
|
|
972
901
|
// Load a template from the DOM, by default. Override
|
973
|
-
// this method to provide your own template retrieval
|
974
|
-
//
|
902
|
+
// this method to provide your own template retrieval
|
903
|
+
// For asynchronous loading with AMD/RequireJS, consider
|
904
|
+
// using a template-loader plugin as described here:
|
905
|
+
// https://github.com/marionettejs/backbone.marionette/wiki/Using-marionette-with-requirejs
|
975
906
|
loadTemplate: function(templateId){
|
976
907
|
var template = $(templateId).html();
|
977
908
|
|
@@ -1023,7 +954,6 @@ Marionette.View = Backbone.View.extend({
|
|
1023
954
|
|
1024
955
|
constructor: function(){
|
1025
956
|
_.bindAll(this, "render");
|
1026
|
-
Marionette.addEventBinder(this);
|
1027
957
|
|
1028
958
|
var args = Array.prototype.slice.apply(arguments);
|
1029
959
|
Backbone.View.prototype.constructor.apply(this, args);
|
@@ -1088,7 +1018,7 @@ Marionette.View = Backbone.View.extend({
|
|
1088
1018
|
};
|
1089
1019
|
|
1090
1020
|
// trigger the event
|
1091
|
-
that.
|
1021
|
+
that.triggerMethod(value, args);
|
1092
1022
|
};
|
1093
1023
|
|
1094
1024
|
});
|
@@ -1444,6 +1374,7 @@ Marionette.CollectionView = Marionette.View.extend({
|
|
1444
1374
|
removeItemView: function(item){
|
1445
1375
|
var view = this.children.findByModel(item);
|
1446
1376
|
this.removeChildView(view);
|
1377
|
+
this.checkEmpty();
|
1447
1378
|
},
|
1448
1379
|
|
1449
1380
|
// Remove the child view and close it
|
@@ -1461,13 +1392,16 @@ Marionette.CollectionView = Marionette.View.extend({
|
|
1461
1392
|
this.children.remove(view);
|
1462
1393
|
}
|
1463
1394
|
|
1395
|
+
this.triggerMethod("item:removed", view);
|
1396
|
+
},
|
1397
|
+
|
1398
|
+
// helper to show the empty view if the collection is empty
|
1399
|
+
checkEmpty: function() {
|
1464
1400
|
// check if we're empty now, and if we are, show the
|
1465
1401
|
// empty view
|
1466
1402
|
if (!this.collection || this.collection.length === 0){
|
1467
1403
|
this.showEmptyView();
|
1468
1404
|
}
|
1469
|
-
|
1470
|
-
this.triggerMethod("item:removed", view);
|
1471
1405
|
},
|
1472
1406
|
|
1473
1407
|
// Append the HTML to the collection's `el`.
|
@@ -1502,9 +1436,7 @@ Marionette.CollectionView = Marionette.View.extend({
|
|
1502
1436
|
this.children.each(function(child){
|
1503
1437
|
this.removeChildView(child);
|
1504
1438
|
}, this);
|
1505
|
-
|
1506
|
-
// re-initialize to clean up after ourselves
|
1507
|
-
this._initChildViewStorage();
|
1439
|
+
this.checkEmpty();
|
1508
1440
|
}
|
1509
1441
|
});
|
1510
1442
|
|
@@ -1842,14 +1774,13 @@ Marionette.AppRouter = Backbone.Router.extend({
|
|
1842
1774
|
// event aggregator as `app.vent`
|
1843
1775
|
Marionette.Application = function(options){
|
1844
1776
|
this.initCallbacks = new Marionette.Callbacks();
|
1845
|
-
this.vent = new
|
1777
|
+
this.vent = new Backbone.Wreqr.EventAggregator();
|
1846
1778
|
this.commands = new Backbone.Wreqr.Commands();
|
1847
1779
|
this.reqres = new Backbone.Wreqr.RequestResponse();
|
1848
1780
|
this.submodules = {};
|
1849
1781
|
|
1850
1782
|
_.extend(this, options);
|
1851
1783
|
|
1852
|
-
Marionette.addEventBinder(this);
|
1853
1784
|
this.triggerMethod = Marionette.triggerMethod;
|
1854
1785
|
};
|
1855
1786
|
|
@@ -1936,8 +1867,6 @@ Marionette.Module = function(moduleName, app){
|
|
1936
1867
|
this.app = app;
|
1937
1868
|
this.startWithParent = true;
|
1938
1869
|
|
1939
|
-
// extend this module with an event binder
|
1940
|
-
Marionette.addEventBinder(this);
|
1941
1870
|
this.triggerMethod = Marionette.triggerMethod;
|
1942
1871
|
};
|
1943
1872
|
|
@@ -1998,7 +1927,7 @@ _.extend(Marionette.Module.prototype, Backbone.Events, {
|
|
1998
1927
|
_.each(this.submodules, function(mod){ mod.stop(); });
|
1999
1928
|
|
2000
1929
|
// run the finalizers
|
2001
|
-
this._finalizerCallbacks.run();
|
1930
|
+
this._finalizerCallbacks.run(undefined,this);
|
2002
1931
|
|
2003
1932
|
// reset the initializers and finalizers
|
2004
1933
|
this._initializerCallbacks.reset();
|