js_stack 1.10.0 → 1.11.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +12 -0
- data/README.md +6 -6
- data/js_stack.gemspec +0 -1
- data/lib/js_stack/version.rb +1 -1
- data/lib/js_stack.rb +0 -1
- data/vendor/assets/javascripts/js_stack/base/backbone/1.2.3.js +1894 -0
- data/vendor/assets/javascripts/js_stack/base/backbone.js +1 -1
- data/vendor/assets/javascripts/js_stack/base/marionette/{2.4.1.js → 2.4.3.js} +265 -138
- data/vendor/assets/javascripts/js_stack/base/marionette.js +1 -1
- data/vendor/assets/javascripts/js_stack/plugins/backbone/stickit/{0.9.0.js → 0.9.2.js} +1 -1
- data/vendor/assets/javascripts/js_stack/plugins/backbone.stickit.js +1 -1
- data/vendor/assets/javascripts/js_stack/plugins/moment/2.10.6.js +3195 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/af.js +72 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/ar-ma.js +58 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/ar-sa.js +102 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/ar-tn.js +56 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/ar.js +135 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/az.js +103 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/be.js +146 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/bg.js +89 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/bn.js +112 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/bo.js +109 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/br.js +106 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/bs.js +140 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/ca.js +78 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/cs.js +156 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/cv.js +62 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/cy.js +78 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/da.js +59 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/de-at.js +75 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/de.js +74 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/el.js +93 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/en-au.js +65 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/en-ca.js +62 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/en-gb.js +66 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/eo.js +72 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/es.js +78 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/et.js +79 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/eu.js +63 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/fa.js +104 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/fi.js +106 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/fo.js +59 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/fr-ca.js +57 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/fr.js +61 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/fy.js +70 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/gl.js +74 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/he.js +81 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/hi.js +122 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/hr.js +139 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/hu.js +108 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/hy-am.js +110 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/id.js +82 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/is.js +126 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/it.js +69 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/ja.js +64 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/jv.js +82 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/ka.js +102 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/km.js +57 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/ko.js +67 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/lb.js +133 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/lt.js +124 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/lv.js +95 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/me.js +108 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/mk.js +89 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/ml.js +70 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/mr.js +120 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/ms-my.js +81 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/ms.js +81 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/my.js +92 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/nb.js +60 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/ne.js +122 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/nl.js +70 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/nn.js +59 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/pl.js +104 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/pt-br.js +59 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/pt.js +63 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/ro.js +73 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/ru.js +163 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/si.js +64 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/sk.js +157 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/sl.js +159 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/sq.js +68 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/sr-cyrl.js +107 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/sr.js +107 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/sv.js +66 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/ta.js +94 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/th.js +64 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/tl-ph.js +61 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/tr.js +89 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/tzl.js +84 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/tzm-latn.js +57 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/tzm.js +57 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/uk.js +152 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/uz.js +57 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/vi.js +65 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/zh-cn.js +126 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment/locale/zh-tw.js +100 -0
- data/vendor/assets/javascripts/js_stack/plugins/moment.js +1 -1
- data/vendor/assets/javascripts/js_stack/plugins/underscore/string/3.2.2.js +1186 -0
- data/vendor/assets/javascripts/js_stack/plugins/underscore.string.js +1 -1
- metadata +93 -20
@@ -1,6 +1,6 @@
|
|
1
1
|
// MarionetteJS (Backbone.Marionette)
|
2
2
|
// ----------------------------------
|
3
|
-
// v2.4.
|
3
|
+
// v2.4.3
|
4
4
|
//
|
5
5
|
// Copyright (c)2015 Derick Bailey, Muted Solutions, LLC.
|
6
6
|
// Distributed under MIT license
|
@@ -38,7 +38,7 @@
|
|
38
38
|
/* istanbul ignore next */
|
39
39
|
// Backbone.BabySitter
|
40
40
|
// -------------------
|
41
|
-
// v0.1.
|
41
|
+
// v0.1.10
|
42
42
|
//
|
43
43
|
// Copyright (c)2015 Derick Bailey, Muted Solutions, LLC.
|
44
44
|
// Distributed under MIT license
|
@@ -167,7 +167,7 @@
|
|
167
167
|
// return the public API
|
168
168
|
return Container;
|
169
169
|
}(Backbone, _);
|
170
|
-
Backbone.ChildViewContainer.VERSION = "0.1.
|
170
|
+
Backbone.ChildViewContainer.VERSION = "0.1.10";
|
171
171
|
Backbone.ChildViewContainer.noConflict = function() {
|
172
172
|
Backbone.ChildViewContainer = previousChildViewContainer;
|
173
173
|
return this;
|
@@ -178,9 +178,9 @@
|
|
178
178
|
/* istanbul ignore next */
|
179
179
|
// Backbone.Wreqr (Backbone.Marionette)
|
180
180
|
// ----------------------------------
|
181
|
-
// v1.3.
|
181
|
+
// v1.3.5
|
182
182
|
//
|
183
|
-
// Copyright (c)
|
183
|
+
// Copyright (c)2015 Derick Bailey, Muted Solutions, LLC.
|
184
184
|
// Distributed under MIT license
|
185
185
|
//
|
186
186
|
// http://github.com/marionettejs/backbone.wreqr
|
@@ -188,7 +188,7 @@
|
|
188
188
|
"use strict";
|
189
189
|
var previousWreqr = Backbone.Wreqr;
|
190
190
|
var Wreqr = Backbone.Wreqr = {};
|
191
|
-
Backbone.Wreqr.VERSION = "1.3.
|
191
|
+
Backbone.Wreqr.VERSION = "1.3.5";
|
192
192
|
Backbone.Wreqr.noConflict = function() {
|
193
193
|
Backbone.Wreqr = previousWreqr;
|
194
194
|
return this;
|
@@ -245,8 +245,7 @@
|
|
245
245
|
return;
|
246
246
|
}
|
247
247
|
return function() {
|
248
|
-
|
249
|
-
return config.callback.apply(config.context, args);
|
248
|
+
return config.callback.apply(config.context, arguments);
|
250
249
|
};
|
251
250
|
},
|
252
251
|
// Remove a handler for the specified name
|
@@ -312,7 +311,7 @@
|
|
312
311
|
//
|
313
312
|
// A simple command pattern implementation. Register a command
|
314
313
|
// handler and execute it.
|
315
|
-
Wreqr.Commands = function(Wreqr) {
|
314
|
+
Wreqr.Commands = function(Wreqr, _) {
|
316
315
|
"use strict";
|
317
316
|
return Wreqr.Handlers.extend({
|
318
317
|
// default storage type
|
@@ -321,13 +320,12 @@
|
|
321
320
|
this.options = options || {};
|
322
321
|
this._initializeStorage(this.options);
|
323
322
|
this.on("handler:add", this._executeCommands, this);
|
324
|
-
|
325
|
-
Wreqr.Handlers.prototype.constructor.apply(this, args);
|
323
|
+
Wreqr.Handlers.prototype.constructor.apply(this, arguments);
|
326
324
|
},
|
327
325
|
// Execute a named command with the supplied args
|
328
|
-
execute: function(name
|
326
|
+
execute: function(name) {
|
329
327
|
name = arguments[0];
|
330
|
-
args =
|
328
|
+
var args = _.rest(arguments);
|
331
329
|
if (this.hasHandler(name)) {
|
332
330
|
this.getHandler(name).apply(this, args);
|
333
331
|
} else {
|
@@ -356,24 +354,22 @@
|
|
356
354
|
this.storage = storage;
|
357
355
|
}
|
358
356
|
});
|
359
|
-
}(Wreqr);
|
357
|
+
}(Wreqr, _);
|
360
358
|
// Wreqr.RequestResponse
|
361
359
|
// ---------------------
|
362
360
|
//
|
363
361
|
// A simple request/response implementation. Register a
|
364
362
|
// request handler, and return a response from it
|
365
|
-
Wreqr.RequestResponse = function(Wreqr) {
|
363
|
+
Wreqr.RequestResponse = function(Wreqr, _) {
|
366
364
|
"use strict";
|
367
365
|
return Wreqr.Handlers.extend({
|
368
|
-
request: function() {
|
369
|
-
var name = arguments[0];
|
370
|
-
var args = Array.prototype.slice.call(arguments, 1);
|
366
|
+
request: function(name) {
|
371
367
|
if (this.hasHandler(name)) {
|
372
|
-
return this.getHandler(name).apply(this,
|
368
|
+
return this.getHandler(name).apply(this, _.rest(arguments));
|
373
369
|
}
|
374
370
|
}
|
375
371
|
});
|
376
|
-
}(Wreqr);
|
372
|
+
}(Wreqr, _);
|
377
373
|
// Event Aggregator
|
378
374
|
// ----------------
|
379
375
|
// A pub-sub object that can be used to decouple various parts
|
@@ -440,7 +436,7 @@
|
|
440
436
|
// --------------
|
441
437
|
//
|
442
438
|
// An object that lets you communicate with many channels.
|
443
|
-
Wreqr.radio = function(Wreqr) {
|
439
|
+
Wreqr.radio = function(Wreqr, _) {
|
444
440
|
"use strict";
|
445
441
|
var Radio = function() {
|
446
442
|
this._channels = {};
|
@@ -480,12 +476,11 @@
|
|
480
476
|
var proxyMethod = function(radio, system, method) {
|
481
477
|
return function(channelName) {
|
482
478
|
var messageSystem = radio._getChannel(channelName)[system];
|
483
|
-
|
484
|
-
return messageSystem[method].apply(messageSystem, args);
|
479
|
+
return messageSystem[method].apply(messageSystem, _.rest(arguments));
|
485
480
|
};
|
486
481
|
};
|
487
482
|
return new Radio();
|
488
|
-
}(Wreqr);
|
483
|
+
}(Wreqr, _);
|
489
484
|
return Backbone.Wreqr;
|
490
485
|
})(Backbone, _);
|
491
486
|
|
@@ -494,7 +489,7 @@
|
|
494
489
|
|
495
490
|
var Marionette = Backbone.Marionette = {};
|
496
491
|
|
497
|
-
Marionette.VERSION = '2.4.
|
492
|
+
Marionette.VERSION = '2.4.3';
|
498
493
|
|
499
494
|
Marionette.noConflict = function() {
|
500
495
|
root.Marionette = previousMarionette;
|
@@ -734,6 +729,8 @@
|
|
734
729
|
// re-rendered.
|
735
730
|
|
736
731
|
Marionette.MonitorDOMRefresh = function(view) {
|
732
|
+
if (view._isDomRefreshMonitored) { return; }
|
733
|
+
view._isDomRefreshMonitored = true;
|
737
734
|
|
738
735
|
// track when the view has been shown in the DOM,
|
739
736
|
// using a Marionette.Region (or by other means of triggering "show")
|
@@ -751,9 +748,7 @@
|
|
751
748
|
// Trigger the "dom:refresh" event and corresponding "onDomRefresh" method
|
752
749
|
function triggerDOMRefresh() {
|
753
750
|
if (view._isShown && view._isRendered && Marionette.isNodeAttached(view.el)) {
|
754
|
-
|
755
|
-
view.triggerMethod('dom:refresh');
|
756
|
-
}
|
751
|
+
Marionette.triggerMethodOn(view, 'dom:refresh', view);
|
757
752
|
}
|
758
753
|
}
|
759
754
|
|
@@ -1094,6 +1089,7 @@
|
|
1094
1089
|
}
|
1095
1090
|
|
1096
1091
|
this._ensureViewIsIntact(view);
|
1092
|
+
Marionette.MonitorDOMRefresh(view);
|
1097
1093
|
|
1098
1094
|
var showOptions = options || {};
|
1099
1095
|
var isDifferentView = view !== this.currentView;
|
@@ -1138,7 +1134,8 @@
|
|
1138
1134
|
// to the currentView since once a view has been destroyed
|
1139
1135
|
// we can not reuse it.
|
1140
1136
|
view.once('destroy', this.empty, this);
|
1141
|
-
|
1137
|
+
|
1138
|
+
this._renderView(view);
|
1142
1139
|
|
1143
1140
|
view._parent = this;
|
1144
1141
|
|
@@ -1161,10 +1158,12 @@
|
|
1161
1158
|
// as it's a potentially-slow method
|
1162
1159
|
var displayedViews = [];
|
1163
1160
|
|
1164
|
-
var
|
1165
|
-
|
1161
|
+
var attachOptions = _.extend({
|
1162
|
+
triggerBeforeAttach: this.triggerBeforeAttach,
|
1163
|
+
triggerAttach: this.triggerAttach
|
1164
|
+
}, showOptions);
|
1166
1165
|
|
1167
|
-
if (attachedRegion && triggerBeforeAttach) {
|
1166
|
+
if (attachedRegion && attachOptions.triggerBeforeAttach) {
|
1168
1167
|
displayedViews = this._displayedViews(view);
|
1169
1168
|
this._triggerAttach(displayedViews, 'before:');
|
1170
1169
|
}
|
@@ -1172,7 +1171,7 @@
|
|
1172
1171
|
this.attachHtml(view);
|
1173
1172
|
this.currentView = view;
|
1174
1173
|
|
1175
|
-
if (attachedRegion && triggerAttach) {
|
1174
|
+
if (attachedRegion && attachOptions.triggerAttach) {
|
1176
1175
|
displayedViews = this._displayedViews(view);
|
1177
1176
|
this._triggerAttach(displayedViews);
|
1178
1177
|
}
|
@@ -1204,6 +1203,16 @@
|
|
1204
1203
|
return _.union([view], _.result(view, '_getNestedViews') || []);
|
1205
1204
|
},
|
1206
1205
|
|
1206
|
+
_renderView: function(view) {
|
1207
|
+
if (!view.supportsRenderLifecycle) {
|
1208
|
+
Marionette.triggerMethodOn(view, 'before:render', view);
|
1209
|
+
}
|
1210
|
+
view.render();
|
1211
|
+
if (!view.supportsRenderLifecycle) {
|
1212
|
+
Marionette.triggerMethodOn(view, 'render', view);
|
1213
|
+
}
|
1214
|
+
},
|
1215
|
+
|
1207
1216
|
_ensureElement: function() {
|
1208
1217
|
if (!_.isObject(this.el)) {
|
1209
1218
|
this.$el = this.getEl(this.el);
|
@@ -1256,7 +1265,8 @@
|
|
1256
1265
|
empty: function(options) {
|
1257
1266
|
var view = this.currentView;
|
1258
1267
|
|
1259
|
-
var
|
1268
|
+
var emptyOptions = options || {};
|
1269
|
+
var preventDestroy = !!emptyOptions.preventDestroy;
|
1260
1270
|
// If there is no view in the region
|
1261
1271
|
// we should not remove anything
|
1262
1272
|
if (!view) { return; }
|
@@ -1282,16 +1292,23 @@
|
|
1282
1292
|
// on the view (if showing a raw Backbone view or a Marionette View)
|
1283
1293
|
_destroyView: function() {
|
1284
1294
|
var view = this.currentView;
|
1295
|
+
if (view.isDestroyed) { return; }
|
1285
1296
|
|
1286
|
-
if (
|
1297
|
+
if (!view.supportsDestroyLifecycle) {
|
1298
|
+
Marionette.triggerMethodOn(view, 'before:destroy', view);
|
1299
|
+
}
|
1300
|
+
if (view.destroy) {
|
1287
1301
|
view.destroy();
|
1288
|
-
} else
|
1302
|
+
} else {
|
1289
1303
|
view.remove();
|
1290
1304
|
|
1291
1305
|
// appending isDestroyed to raw Backbone View allows regions
|
1292
1306
|
// to throw a ViewDestroyedError for this view
|
1293
1307
|
view.isDestroyed = true;
|
1294
1308
|
}
|
1309
|
+
if (!view.supportsDestroyLifecycle) {
|
1310
|
+
Marionette.triggerMethodOn(view, 'destroy', view);
|
1311
|
+
}
|
1295
1312
|
},
|
1296
1313
|
|
1297
1314
|
// Attach an existing view to the region. This
|
@@ -1299,6 +1316,10 @@
|
|
1299
1316
|
// and will not replace the current HTML for the `el`
|
1300
1317
|
// of the region.
|
1301
1318
|
attachView: function(view) {
|
1319
|
+
if (this.currentView) {
|
1320
|
+
delete this.currentView._parent;
|
1321
|
+
}
|
1322
|
+
view._parent = this;
|
1302
1323
|
this.currentView = view;
|
1303
1324
|
return this;
|
1304
1325
|
},
|
@@ -1590,16 +1611,15 @@
|
|
1590
1611
|
// using a template-loader plugin as described here:
|
1591
1612
|
// https://github.com/marionettejs/backbone.marionette/wiki/Using-marionette-with-requirejs
|
1592
1613
|
loadTemplate: function(templateId, options) {
|
1593
|
-
var template = Backbone.$(templateId)
|
1614
|
+
var $template = Backbone.$(templateId);
|
1594
1615
|
|
1595
|
-
if (
|
1616
|
+
if (!$template.length) {
|
1596
1617
|
throw new Marionette.Error({
|
1597
1618
|
name: 'NoTemplateError',
|
1598
1619
|
message: 'Could not find template: "' + templateId + '"'
|
1599
1620
|
});
|
1600
1621
|
}
|
1601
|
-
|
1602
|
-
return template;
|
1622
|
+
return $template.html();
|
1603
1623
|
},
|
1604
1624
|
|
1605
1625
|
// Pre-compile the template before caching it. Override
|
@@ -1644,9 +1664,11 @@
|
|
1644
1664
|
// The core view class that other Marionette views extend from.
|
1645
1665
|
Marionette.View = Backbone.View.extend({
|
1646
1666
|
isDestroyed: false,
|
1667
|
+
supportsRenderLifecycle: true,
|
1668
|
+
supportsDestroyLifecycle: true,
|
1647
1669
|
|
1648
1670
|
constructor: function(options) {
|
1649
|
-
_.
|
1671
|
+
this.render = _.bind(this.render, this);
|
1650
1672
|
|
1651
1673
|
options = Marionette._getValue(options, this);
|
1652
1674
|
|
@@ -1866,14 +1888,13 @@
|
|
1866
1888
|
// Internal method to create an event handler for a given `triggerDef` like
|
1867
1889
|
// 'click:foo'
|
1868
1890
|
_buildViewTrigger: function(triggerDef) {
|
1869
|
-
var hasOptions = _.isObject(triggerDef);
|
1870
1891
|
|
1871
|
-
var options = _.defaults({},
|
1892
|
+
var options = _.defaults({}, triggerDef, {
|
1872
1893
|
preventDefault: true,
|
1873
1894
|
stopPropagation: true
|
1874
1895
|
});
|
1875
1896
|
|
1876
|
-
var eventName =
|
1897
|
+
var eventName = _.isObject(triggerDef) ? options.event : triggerDef;
|
1877
1898
|
|
1878
1899
|
return function(e) {
|
1879
1900
|
if (e) {
|
@@ -1936,15 +1957,16 @@
|
|
1936
1957
|
// invoke triggerMethod on parent view
|
1937
1958
|
var eventPrefix = Marionette.getOption(layoutView, 'childViewEventPrefix');
|
1938
1959
|
var prefixedEventName = eventPrefix + ':' + eventName;
|
1960
|
+
var callArgs = [this].concat(args);
|
1939
1961
|
|
1940
|
-
Marionette._triggerMethod(layoutView,
|
1962
|
+
Marionette._triggerMethod(layoutView, prefixedEventName, callArgs);
|
1941
1963
|
|
1942
1964
|
// call the parent view's childEvents handler
|
1943
1965
|
var childEvents = Marionette.getOption(layoutView, 'childEvents');
|
1944
1966
|
var normalizedChildEvents = layoutView.normalizeMethods(childEvents);
|
1945
1967
|
|
1946
|
-
if (
|
1947
|
-
normalizedChildEvents[eventName].apply(layoutView,
|
1968
|
+
if (normalizedChildEvents && _.isFunction(normalizedChildEvents[eventName])) {
|
1969
|
+
normalizedChildEvents[eventName].apply(layoutView, callArgs);
|
1948
1970
|
}
|
1949
1971
|
},
|
1950
1972
|
|
@@ -2117,7 +2139,7 @@
|
|
2117
2139
|
}
|
2118
2140
|
});
|
2119
2141
|
|
2120
|
-
/* jshint maxstatements:
|
2142
|
+
/* jshint maxstatements: 20, maxcomplexity: 7 */
|
2121
2143
|
|
2122
2144
|
// Collection View
|
2123
2145
|
// ---------------
|
@@ -2141,14 +2163,17 @@
|
|
2141
2163
|
// option to pass `{comparator: compFunction()}` to allow the `CollectionView`
|
2142
2164
|
// to use a custom sort order for the collection.
|
2143
2165
|
constructor: function(options) {
|
2144
|
-
|
2145
2166
|
this.once('render', this._initialEvents);
|
2146
2167
|
this._initChildViewStorage();
|
2147
2168
|
|
2148
2169
|
Marionette.View.apply(this, arguments);
|
2149
2170
|
|
2150
|
-
this.on(
|
2151
|
-
|
2171
|
+
this.on({
|
2172
|
+
'before:show': this._onBeforeShowCalled,
|
2173
|
+
'show': this._onShowCalled,
|
2174
|
+
'before:attach': this._onBeforeAttachCalled,
|
2175
|
+
'attach': this._onAttachCalled
|
2176
|
+
});
|
2152
2177
|
this.initRenderBuffer();
|
2153
2178
|
},
|
2154
2179
|
|
@@ -2165,33 +2190,38 @@
|
|
2165
2190
|
},
|
2166
2191
|
|
2167
2192
|
endBuffering: function() {
|
2168
|
-
this.
|
2169
|
-
this.
|
2170
|
-
|
2171
|
-
this.attachBuffer(this);
|
2193
|
+
// Only trigger attach if already shown and attached, otherwise Region#show() handles this.
|
2194
|
+
var canTriggerAttach = this._isShown && Marionette.isNodeAttached(this.el);
|
2195
|
+
var nestedViews;
|
2172
2196
|
|
2173
|
-
this.
|
2174
|
-
this.initRenderBuffer();
|
2175
|
-
},
|
2197
|
+
this.isBuffering = false;
|
2176
2198
|
|
2177
|
-
_triggerBeforeShowBufferedChildren: function() {
|
2178
2199
|
if (this._isShown) {
|
2179
|
-
|
2200
|
+
this._triggerMethodMany(this._bufferedChildren, this, 'before:show');
|
2201
|
+
}
|
2202
|
+
if (canTriggerAttach && this._triggerBeforeAttach) {
|
2203
|
+
nestedViews = this._getNestedViews();
|
2204
|
+
this._triggerMethodMany(nestedViews, this, 'before:attach');
|
2180
2205
|
}
|
2181
|
-
},
|
2182
2206
|
|
2183
|
-
|
2184
|
-
if (this._isShown) {
|
2185
|
-
_.each(this._bufferedChildren, _.partial(this._triggerMethodOnChild, 'show'));
|
2207
|
+
this.attachBuffer(this, this._createBuffer());
|
2186
2208
|
|
2187
|
-
|
2209
|
+
if (canTriggerAttach && this._triggerAttach) {
|
2210
|
+
nestedViews = this._getNestedViews();
|
2211
|
+
this._triggerMethodMany(nestedViews, this, 'attach');
|
2188
2212
|
}
|
2213
|
+
if (this._isShown) {
|
2214
|
+
this._triggerMethodMany(this._bufferedChildren, this, 'show');
|
2215
|
+
}
|
2216
|
+
this.initRenderBuffer();
|
2189
2217
|
},
|
2190
2218
|
|
2191
|
-
|
2192
|
-
|
2193
|
-
|
2194
|
-
|
2219
|
+
_triggerMethodMany: function(targets, source, eventName) {
|
2220
|
+
var args = _.drop(arguments, 3);
|
2221
|
+
|
2222
|
+
_.each(targets, function(target) {
|
2223
|
+
Marionette.triggerMethodOn.apply(target, [target, eventName, target, source].concat(args));
|
2224
|
+
});
|
2195
2225
|
},
|
2196
2226
|
|
2197
2227
|
// Configured the initial events that the collection view
|
@@ -2210,11 +2240,12 @@
|
|
2210
2240
|
|
2211
2241
|
// Handle a child added to the collection
|
2212
2242
|
_onCollectionAdd: function(child, collection, opts) {
|
2213
|
-
|
2214
|
-
|
2215
|
-
|
2216
|
-
|
2217
|
-
|
2243
|
+
// `index` is present when adding with `at` since BB 1.2; indexOf fallback for < 1.2
|
2244
|
+
var index = opts.at !== undefined && (opts.index || collection.indexOf(child));
|
2245
|
+
|
2246
|
+
// When filtered or when there is no initial index, calculate index.
|
2247
|
+
if (this.getOption('filter') || index === false) {
|
2248
|
+
index = _.indexOf(this._filteredSortedModels(index), child);
|
2218
2249
|
}
|
2219
2250
|
|
2220
2251
|
if (this._shouldAddChild(child, index)) {
|
@@ -2231,8 +2262,29 @@
|
|
2231
2262
|
this.checkEmpty();
|
2232
2263
|
},
|
2233
2264
|
|
2265
|
+
_onBeforeShowCalled: function() {
|
2266
|
+
// Reset attach event flags at the top of the Region#show() event lifecycle; if the Region's
|
2267
|
+
// show() options permit onBeforeAttach/onAttach events, these flags will be set true again.
|
2268
|
+
this._triggerBeforeAttach = this._triggerAttach = false;
|
2269
|
+
this.children.each(function(childView) {
|
2270
|
+
Marionette.triggerMethodOn(childView, 'before:show', childView);
|
2271
|
+
});
|
2272
|
+
},
|
2273
|
+
|
2234
2274
|
_onShowCalled: function() {
|
2235
|
-
this.children.each(
|
2275
|
+
this.children.each(function(childView) {
|
2276
|
+
Marionette.triggerMethodOn(childView, 'show', childView);
|
2277
|
+
});
|
2278
|
+
},
|
2279
|
+
|
2280
|
+
// If during Region#show() onBeforeAttach was fired, continue firing it for child views
|
2281
|
+
_onBeforeAttachCalled: function() {
|
2282
|
+
this._triggerBeforeAttach = true;
|
2283
|
+
},
|
2284
|
+
|
2285
|
+
// If during Region#show() onAttach was fired, continue firing it for child views
|
2286
|
+
_onAttachCalled: function() {
|
2287
|
+
this._triggerAttach = true;
|
2236
2288
|
},
|
2237
2289
|
|
2238
2290
|
// Render children views. Override this method to
|
@@ -2265,8 +2317,10 @@
|
|
2265
2317
|
this.render();
|
2266
2318
|
} else {
|
2267
2319
|
// get the DOM nodes in the same order as the models
|
2268
|
-
var els = _.map(models, function(model) {
|
2269
|
-
|
2320
|
+
var els = _.map(models, function(model, index) {
|
2321
|
+
var view = children.findByModel(model);
|
2322
|
+
view._index = index;
|
2323
|
+
return view.el;
|
2270
2324
|
});
|
2271
2325
|
|
2272
2326
|
// since append moves elements that are already in the DOM,
|
@@ -2319,7 +2373,7 @@
|
|
2319
2373
|
// process
|
2320
2374
|
_renderChildren: function() {
|
2321
2375
|
this.destroyEmptyView();
|
2322
|
-
this.destroyChildren();
|
2376
|
+
this.destroyChildren({checkEmpty: false});
|
2323
2377
|
|
2324
2378
|
if (this.isEmpty(this.collection)) {
|
2325
2379
|
this.showEmptyView();
|
@@ -2331,7 +2385,7 @@
|
|
2331
2385
|
this.triggerMethod('render:collection', this);
|
2332
2386
|
|
2333
2387
|
// If we have shown children and none have passed the filter, show the empty view
|
2334
|
-
if (this.children.isEmpty()) {
|
2388
|
+
if (this.children.isEmpty() && this.getOption('filter')) {
|
2335
2389
|
this.showEmptyView();
|
2336
2390
|
}
|
2337
2391
|
}
|
@@ -2350,18 +2404,22 @@
|
|
2350
2404
|
},
|
2351
2405
|
|
2352
2406
|
// Allow the collection to be sorted by a custom view comparator
|
2353
|
-
_filteredSortedModels: function() {
|
2354
|
-
var models;
|
2407
|
+
_filteredSortedModels: function(addedAt) {
|
2355
2408
|
var viewComparator = this.getViewComparator();
|
2409
|
+
var models = this.collection.models;
|
2410
|
+
addedAt = Math.min(Math.max(addedAt, 0), models.length - 1);
|
2356
2411
|
|
2357
2412
|
if (viewComparator) {
|
2358
|
-
|
2359
|
-
|
2360
|
-
|
2361
|
-
|
2413
|
+
var addedModel;
|
2414
|
+
// Preserve `at` location, even for a sorted view
|
2415
|
+
if (addedAt) {
|
2416
|
+
addedModel = models[addedAt];
|
2417
|
+
models = models.slice(0, addedAt).concat(models.slice(addedAt + 1));
|
2418
|
+
}
|
2419
|
+
models = this._sortModelsBy(models, viewComparator);
|
2420
|
+
if (addedModel) {
|
2421
|
+
models.splice(addedAt, 0, addedModel);
|
2362
2422
|
}
|
2363
|
-
} else {
|
2364
|
-
models = this.collection.models;
|
2365
2423
|
}
|
2366
2424
|
|
2367
2425
|
// Filter after sorting in case the filter uses the index
|
@@ -2374,6 +2432,18 @@
|
|
2374
2432
|
return models;
|
2375
2433
|
},
|
2376
2434
|
|
2435
|
+
_sortModelsBy: function(models, comparator) {
|
2436
|
+
if (typeof comparator === 'string') {
|
2437
|
+
return _.sortBy(models, function(model) {
|
2438
|
+
return model.get(comparator);
|
2439
|
+
}, this);
|
2440
|
+
} else if (comparator.length === 1) {
|
2441
|
+
return _.sortBy(models, comparator, this);
|
2442
|
+
} else {
|
2443
|
+
return models.sort(_.bind(comparator, this));
|
2444
|
+
}
|
2445
|
+
},
|
2446
|
+
|
2377
2447
|
// Internal method to show an empty view in place of
|
2378
2448
|
// a collection of child views, when the collection is empty
|
2379
2449
|
showEmptyView: function() {
|
@@ -2413,6 +2483,10 @@
|
|
2413
2483
|
// but "add:child" events are not fired, and the event from
|
2414
2484
|
// emptyView are not forwarded
|
2415
2485
|
addEmptyView: function(child, EmptyView) {
|
2486
|
+
// Only trigger attach if already shown, attached, and not buffering, otherwise endBuffer() or
|
2487
|
+
// Region#show() handles this.
|
2488
|
+
var canTriggerAttach = this._isShown && !this.isBuffering && Marionette.isNodeAttached(this.el);
|
2489
|
+
var nestedViews;
|
2416
2490
|
|
2417
2491
|
// get the emptyViewOptions, falling back to childViewOptions
|
2418
2492
|
var emptyViewOptions = this.getOption('emptyViewOptions') ||
|
@@ -2430,23 +2504,32 @@
|
|
2430
2504
|
// Proxy emptyView events
|
2431
2505
|
this.proxyChildEvents(view);
|
2432
2506
|
|
2433
|
-
|
2434
|
-
|
2435
|
-
|
2436
|
-
|
2437
|
-
|
2507
|
+
view.once('render', function() {
|
2508
|
+
// trigger the 'before:show' event on `view` if the collection view has already been shown
|
2509
|
+
if (this._isShown) {
|
2510
|
+
Marionette.triggerMethodOn(view, 'before:show', view);
|
2511
|
+
}
|
2438
2512
|
|
2439
|
-
|
2440
|
-
|
2441
|
-
|
2513
|
+
// Trigger `before:attach` following `render` to avoid adding logic and event triggers
|
2514
|
+
// to public method `renderChildView()`.
|
2515
|
+
if (canTriggerAttach && this._triggerBeforeAttach) {
|
2516
|
+
nestedViews = this._getViewAndNested(view);
|
2517
|
+
this._triggerMethodMany(nestedViews, this, 'before:attach');
|
2518
|
+
}
|
2519
|
+
}, this);
|
2442
2520
|
|
2443
|
-
//
|
2521
|
+
// Store the `emptyView` like a `childView` so we can properly remove and/or close it later
|
2522
|
+
this.children.add(view);
|
2444
2523
|
this.renderChildView(view, this._emptyViewIndex);
|
2445
2524
|
|
2446
|
-
//
|
2447
|
-
|
2525
|
+
// Trigger `attach`
|
2526
|
+
if (canTriggerAttach && this._triggerAttach) {
|
2527
|
+
nestedViews = this._getViewAndNested(view);
|
2528
|
+
this._triggerMethodMany(nestedViews, this, 'attach');
|
2529
|
+
}
|
2530
|
+
// call the 'show' method if the collection view has already been shown
|
2448
2531
|
if (this._isShown) {
|
2449
|
-
Marionette.triggerMethodOn(view, 'show');
|
2532
|
+
Marionette.triggerMethodOn(view, 'show', view);
|
2450
2533
|
}
|
2451
2534
|
},
|
2452
2535
|
|
@@ -2482,7 +2565,9 @@
|
|
2482
2565
|
// increment indices of views after this one
|
2483
2566
|
this._updateIndices(view, true, index);
|
2484
2567
|
|
2568
|
+
this.triggerMethod('before:add:child', view);
|
2485
2569
|
this._addChildView(view, index);
|
2570
|
+
this.triggerMethod('add:child', view);
|
2486
2571
|
|
2487
2572
|
view._parent = this;
|
2488
2573
|
|
@@ -2512,32 +2597,52 @@
|
|
2512
2597
|
// Internal Method. Add the view to children and render it at
|
2513
2598
|
// the given index.
|
2514
2599
|
_addChildView: function(view, index) {
|
2600
|
+
// Only trigger attach if already shown, attached, and not buffering, otherwise endBuffer() or
|
2601
|
+
// Region#show() handles this.
|
2602
|
+
var canTriggerAttach = this._isShown && !this.isBuffering && Marionette.isNodeAttached(this.el);
|
2603
|
+
var nestedViews;
|
2604
|
+
|
2515
2605
|
// set up the child view event forwarding
|
2516
2606
|
this.proxyChildEvents(view);
|
2517
2607
|
|
2518
|
-
|
2608
|
+
view.once('render', function() {
|
2609
|
+
// trigger the 'before:show' event on `view` if the collection view has already been shown
|
2610
|
+
if (this._isShown && !this.isBuffering) {
|
2611
|
+
Marionette.triggerMethodOn(view, 'before:show', view);
|
2612
|
+
}
|
2519
2613
|
|
2520
|
-
|
2521
|
-
|
2522
|
-
|
2523
|
-
|
2524
|
-
|
2614
|
+
// Trigger `before:attach` following `render` to avoid adding logic and event triggers
|
2615
|
+
// to public method `renderChildView()`.
|
2616
|
+
if (canTriggerAttach && this._triggerBeforeAttach) {
|
2617
|
+
nestedViews = this._getViewAndNested(view);
|
2618
|
+
this._triggerMethodMany(nestedViews, this, 'before:attach');
|
2619
|
+
}
|
2620
|
+
}, this);
|
2525
2621
|
|
2526
|
-
// Store the child view itself so we can properly
|
2527
|
-
// remove and/or destroy it later
|
2622
|
+
// Store the child view itself so we can properly remove and/or destroy it later
|
2528
2623
|
this.children.add(view);
|
2529
2624
|
this.renderChildView(view, index);
|
2530
2625
|
|
2626
|
+
// Trigger `attach`
|
2627
|
+
if (canTriggerAttach && this._triggerAttach) {
|
2628
|
+
nestedViews = this._getViewAndNested(view);
|
2629
|
+
this._triggerMethodMany(nestedViews, this, 'attach');
|
2630
|
+
}
|
2631
|
+
// Trigger `show`
|
2531
2632
|
if (this._isShown && !this.isBuffering) {
|
2532
|
-
Marionette.triggerMethodOn(view, 'show');
|
2633
|
+
Marionette.triggerMethodOn(view, 'show', view);
|
2533
2634
|
}
|
2534
|
-
|
2535
|
-
this.triggerMethod('add:child', view);
|
2536
2635
|
},
|
2537
2636
|
|
2538
2637
|
// render the child view
|
2539
2638
|
renderChildView: function(view, index) {
|
2639
|
+
if (!view.supportsRenderLifecycle) {
|
2640
|
+
Marionette.triggerMethodOn(view, 'before:render', view);
|
2641
|
+
}
|
2540
2642
|
view.render();
|
2643
|
+
if (!view.supportsRenderLifecycle) {
|
2644
|
+
Marionette.triggerMethodOn(view, 'render', view);
|
2645
|
+
}
|
2541
2646
|
this.attachHtml(this, view, index);
|
2542
2647
|
return view;
|
2543
2648
|
},
|
@@ -2545,7 +2650,9 @@
|
|
2545
2650
|
// Build a `childView` for a model in the collection.
|
2546
2651
|
buildChildView: function(child, ChildViewClass, childViewOptions) {
|
2547
2652
|
var options = _.extend({model: child}, childViewOptions);
|
2548
|
-
|
2653
|
+
var childView = new ChildViewClass(options);
|
2654
|
+
Marionette.MonitorDOMRefresh(childView);
|
2655
|
+
return childView;
|
2549
2656
|
},
|
2550
2657
|
|
2551
2658
|
// Remove the child view and destroy it.
|
@@ -2553,25 +2660,30 @@
|
|
2553
2660
|
// later views in the collection in order to keep
|
2554
2661
|
// the children in sync with the collection.
|
2555
2662
|
removeChildView: function(view) {
|
2663
|
+
if (!view) { return view; }
|
2556
2664
|
|
2557
|
-
|
2558
|
-
this.triggerMethod('before:remove:child', view);
|
2665
|
+
this.triggerMethod('before:remove:child', view);
|
2559
2666
|
|
2560
|
-
|
2561
|
-
|
2562
|
-
|
2563
|
-
|
2564
|
-
|
2565
|
-
|
2667
|
+
if (!view.supportsDestroyLifecycle) {
|
2668
|
+
Marionette.triggerMethodOn(view, 'before:destroy', view);
|
2669
|
+
}
|
2670
|
+
// call 'destroy' or 'remove', depending on which is found
|
2671
|
+
if (view.destroy) {
|
2672
|
+
view.destroy();
|
2673
|
+
} else {
|
2674
|
+
view.remove();
|
2675
|
+
}
|
2676
|
+
if (!view.supportsDestroyLifecycle) {
|
2677
|
+
Marionette.triggerMethodOn(view, 'destroy', view);
|
2678
|
+
}
|
2566
2679
|
|
2567
|
-
|
2568
|
-
|
2569
|
-
|
2570
|
-
|
2680
|
+
delete view._parent;
|
2681
|
+
this.stopListening(view);
|
2682
|
+
this.children.remove(view);
|
2683
|
+
this.triggerMethod('remove:child', view);
|
2571
2684
|
|
2572
|
-
|
2573
|
-
|
2574
|
-
}
|
2685
|
+
// decrement the index of views after this one
|
2686
|
+
this._updateIndices(view, false);
|
2575
2687
|
|
2576
2688
|
return view;
|
2577
2689
|
},
|
@@ -2589,14 +2701,14 @@
|
|
2589
2701
|
},
|
2590
2702
|
|
2591
2703
|
// You might need to override this if you've overridden attachHtml
|
2592
|
-
attachBuffer: function(collectionView) {
|
2593
|
-
collectionView.$el.append(
|
2704
|
+
attachBuffer: function(collectionView, buffer) {
|
2705
|
+
collectionView.$el.append(buffer);
|
2594
2706
|
},
|
2595
2707
|
|
2596
2708
|
// Create a fragment buffer from the currently buffered children
|
2597
|
-
_createBuffer: function(
|
2709
|
+
_createBuffer: function() {
|
2598
2710
|
var elBuffer = document.createDocumentFragment();
|
2599
|
-
_.each(
|
2711
|
+
_.each(this._bufferedChildren, function(b) {
|
2600
2712
|
elBuffer.appendChild(b.el);
|
2601
2713
|
});
|
2602
2714
|
return elBuffer;
|
@@ -2657,7 +2769,7 @@
|
|
2657
2769
|
if (this.isDestroyed) { return this; }
|
2658
2770
|
|
2659
2771
|
this.triggerMethod('before:destroy:collection');
|
2660
|
-
this.destroyChildren();
|
2772
|
+
this.destroyChildren({checkEmpty: false});
|
2661
2773
|
this.triggerMethod('destroy:collection');
|
2662
2774
|
|
2663
2775
|
return Marionette.View.prototype.destroy.apply(this, arguments);
|
@@ -2665,10 +2777,20 @@
|
|
2665
2777
|
|
2666
2778
|
// Destroy the child views that this collection view
|
2667
2779
|
// is holding on to, if any
|
2668
|
-
destroyChildren: function() {
|
2780
|
+
destroyChildren: function(options) {
|
2781
|
+
var destroyOptions = options || {};
|
2782
|
+
var shouldCheckEmpty = true;
|
2669
2783
|
var childViews = this.children.map(_.identity);
|
2784
|
+
|
2785
|
+
if (!_.isUndefined(destroyOptions.checkEmpty)) {
|
2786
|
+
shouldCheckEmpty = destroyOptions.checkEmpty;
|
2787
|
+
}
|
2788
|
+
|
2670
2789
|
this.children.each(this.removeChildView, this);
|
2671
|
-
|
2790
|
+
|
2791
|
+
if (shouldCheckEmpty) {
|
2792
|
+
this.checkEmpty();
|
2793
|
+
}
|
2672
2794
|
return childViews;
|
2673
2795
|
},
|
2674
2796
|
|
@@ -2712,6 +2834,11 @@
|
|
2712
2834
|
return _.values(this.children._views);
|
2713
2835
|
},
|
2714
2836
|
|
2837
|
+
_getViewAndNested: function(view) {
|
2838
|
+
// This will not fail on Backbone.View which does not have #_getNestedViews.
|
2839
|
+
return [view].concat(_.result(view, '_getNestedViews') || []);
|
2840
|
+
},
|
2841
|
+
|
2715
2842
|
getViewComparator: function() {
|
2716
2843
|
return this.getOption('viewComparator');
|
2717
2844
|
}
|
@@ -2840,9 +2967,9 @@
|
|
2840
2967
|
},
|
2841
2968
|
|
2842
2969
|
// You might need to override this if you've overridden attachHtml
|
2843
|
-
attachBuffer: function(compositeView) {
|
2970
|
+
attachBuffer: function(compositeView, buffer) {
|
2844
2971
|
var $container = this.getChildViewContainer(compositeView);
|
2845
|
-
$container.append(
|
2972
|
+
$container.append(buffer);
|
2846
2973
|
},
|
2847
2974
|
|
2848
2975
|
// Internal method. Append a view to the end of the $el.
|
@@ -2864,7 +2991,7 @@
|
|
2864
2991
|
// Internal method to ensure an `$childViewContainer` exists, for the
|
2865
2992
|
// `attachHtml` method to use.
|
2866
2993
|
getChildViewContainer: function(containerView, childView) {
|
2867
|
-
if (
|
2994
|
+
if (!!containerView.$childViewContainer) {
|
2868
2995
|
return containerView.$childViewContainer;
|
2869
2996
|
}
|
2870
2997
|
|
@@ -2898,7 +3025,7 @@
|
|
2898
3025
|
// Internal method to reset the `$childViewContainer` on render
|
2899
3026
|
resetChildViewContainer: function() {
|
2900
3027
|
if (this.$childViewContainer) {
|
2901
|
-
|
3028
|
+
this.$childViewContainer = undefined;
|
2902
3029
|
}
|
2903
3030
|
}
|
2904
3031
|
});
|
@@ -3408,7 +3535,7 @@
|
|
3408
3535
|
this.submodules = {};
|
3409
3536
|
_.extend(this, options);
|
3410
3537
|
this._initChannel();
|
3411
|
-
Marionette.Object.
|
3538
|
+
Marionette.Object.apply(this, arguments);
|
3412
3539
|
},
|
3413
3540
|
|
3414
3541
|
// Command execution, facilitated by Backbone.Wreqr.Commands
|