marionette-rails 0.9.0 → 0.9.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.
@@ -1,4 +1,4 @@
1
- // Backbone.Marionette v0.9.0
1
+ // Backbone.Marionette v0.9.1
2
2
  //
3
3
  // Copyright (C)2012 Derick Bailey, Muted Solutions, LLC
4
4
  // Distributed Under MIT License
@@ -264,6 +264,7 @@ Marionette.CollectionView = Marionette.View.extend({
264
264
 
265
265
  // Handle a child item added to the collection
266
266
  addChildView: function(item, collection, options){
267
+ this.closeEmptyView();
267
268
  var ItemView = this.getItemView();
268
269
  return this.addItemView(item, ItemView, options.index);
269
270
  },
@@ -274,30 +275,66 @@ Marionette.CollectionView = Marionette.View.extend({
274
275
  this.onShowCallbacks.run();
275
276
  },
276
277
 
277
- // Loop through all of the items and render
278
- // each of them with the specified `itemView`.
279
- render: function(){
280
- var that = this;
281
- var ItemView = this.getItemView();
282
- var EmptyView = this.options.emptyView || this.emptyView;
283
-
278
+ // Internal method to trigger the before render callbacks
279
+ // and events
280
+ triggerBeforeRender: function(){
284
281
  if (this.beforeRender) { this.beforeRender(); }
285
282
  this.trigger("collection:before:render", this);
283
+ },
286
284
 
285
+ // Internal method to trigger the rendered callbacks and
286
+ // events
287
+ triggerRendered: function(){
288
+ if (this.onRender) { this.onRender(); }
289
+ this.trigger("collection:rendered", this);
290
+ },
291
+
292
+ // Render the collection of items. Override this method to
293
+ // provide your own implementation of a render function for
294
+ // the collection view.
295
+ render: function(){
296
+ this.triggerBeforeRender();
287
297
  this.closeChildren();
288
298
 
289
- if (this.collection) {
290
- if (this.collection.length === 0 && EmptyView) {
291
- this.addItemView(new Backbone.Model(), EmptyView, 0);
292
- } else {
293
- this.collection.each(function(item, index){
294
- that.addItemView(item, ItemView, index);
295
- });
296
- }
299
+ if (this.collection && this.collection.length > 0) {
300
+ this.showCollection();
301
+ } else {
302
+ this.showEmptyView();
297
303
  }
298
304
 
299
- if (this.onRender) { this.onRender(); }
300
- this.trigger("collection:rendered", this);
305
+ this.triggerRendered();
306
+ },
307
+
308
+ // Internal method to loop through each item in the
309
+ // collection view and show it
310
+ showCollection: function(){
311
+ var that = this;
312
+ var ItemView = this.getItemView();
313
+ this.collection.each(function(item, index){
314
+ that.addItemView(item, ItemView, index);
315
+ });
316
+ },
317
+
318
+ // Internal method to show an empty view in place of
319
+ // a collection of item views, when the collection is
320
+ // empty
321
+ showEmptyView: function(){
322
+ var EmptyView = this.options.emptyView || this.emptyView;
323
+ if (EmptyView){
324
+ this.showingEmptyView = true;
325
+ var model = new Backbone.Model();
326
+ this.addItemView(model, EmptyView, 0);
327
+ }
328
+ },
329
+
330
+ // Internal method to close an existing emptyView instance
331
+ // if one exists. Called when a collection view has been
332
+ // rendered empty, and then an item is added to the collection.
333
+ closeEmptyView: function(){
334
+ if (this.showingEmptyView){
335
+ this.closeChildren();
336
+ delete this.showingEmptyView;
337
+ }
301
338
  },
302
339
 
303
340
  // Retrieve the itemView type, either from `this.options.itemView`
@@ -380,6 +417,11 @@ Marionette.CollectionView = Marionette.View.extend({
380
417
  view.close();
381
418
  delete this.children[item.cid];
382
419
  }
420
+
421
+ if (this.collection.length === 0){
422
+ this.showEmptyView();
423
+ }
424
+
383
425
  this.trigger("item:removed", view);
384
426
  },
385
427
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: marionette-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.0
4
+ version: 0.9.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-06-14 00:00:00.000000000 Z
12
+ date: 2012-06-20 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails