Show More
@@ -661,10 +661,9 b' define(["widgets/js/manager",' | |||
|
661 | 661 | |
|
662 | 662 | _.extend(ViewList.prototype, { |
|
663 | 663 | initialize: function(create_view, remove_view, context) { |
|
664 | this.state_change = Promise.resolve(); | |
|
665 | 664 | this._handler_context = context || this; |
|
666 | 665 | this._models = []; |
|
667 | this.views = []; | |
|
666 | this.views = []; // list of promises for views | |
|
668 | 667 | this._create_view = create_view; |
|
669 | 668 | this._remove_view = remove_view || function(view) {view.remove();}; |
|
670 | 669 | }, |
@@ -673,42 +672,36 b' define(["widgets/js/manager",' | |||
|
673 | 672 | /** |
|
674 | 673 | * the create_view, remove_view, and context arguments override the defaults |
|
675 | 674 | * specified when the list is created. |
|
676 | * returns a promise that resolves after this update is done | |
|
675 | * after this function, the .views attribute is a list of promises for views | |
|
676 | * if you want to perform some action on the list of views, do something like | |
|
677 | * `Promise.all(myviewlist.views).then(function(views) {...});` | |
|
677 | 678 | */ |
|
678 | 679 | var remove = remove_view || this._remove_view; |
|
679 | 680 | var create = create_view || this._create_view; |
|
680 | if (create === undefined || remove === undefined){ | |
|
681 | console.error("Must define a create a remove function"); | |
|
682 | } | |
|
683 | 681 | var context = context || this._handler_context; |
|
684 |
var |
|
|
685 | var that = this; | |
|
686 | this.state_change = this.state_change.then(function() { | |
|
687 | var i; | |
|
688 | // first, skip past the beginning of the lists if they are identical | |
|
689 | for (i = 0; i < new_models.length; i++) { | |
|
690 | if (i >= that._models.length || new_models[i] !== that._models[i]) { | |
|
691 | break; | |
|
692 | } | |
|
693 | } | |
|
694 | var first_removed = i; | |
|
695 | // Remove the non-matching items from the old list. | |
|
696 | for (var j = first_removed; j < that._models.length; j++) { | |
|
697 | remove.call(context, that.views[j]); | |
|
698 | } | |
|
699 | ||
|
700 | // Add the rest of the new list items. | |
|
701 | for (; i < new_models.length; i++) { | |
|
702 | added_views.push(create.call(context, new_models[i])); | |
|
682 | var i = 0; | |
|
683 | // first, skip past the beginning of the lists if they are identical | |
|
684 | for (; i < new_models.length; i++) { | |
|
685 | if (i >= this._models.length || new_models[i] !== this._models[i]) { | |
|
686 | break; | |
|
703 | 687 | } |
|
704 | // make a copy of the input array | |
|
705 | that._models = new_models.slice(); | |
|
706 | return Promise.all(added_views).then(function(added) { | |
|
707 | Array.prototype.splice.apply(that.views, [first_removed, that.views.length].concat(added)); | |
|
708 | return that.views; | |
|
688 | } | |
|
689 | ||
|
690 | var first_removed = i; | |
|
691 | // Remove the non-matching items from the old list. | |
|
692 | var removed = this.views.splice(first_removed, this.views.length-first_removed); | |
|
693 | for (var j = 0; j < removed.length; j++) { | |
|
694 | removed[j].then(function(view) { | |
|
695 | remove.call(context, view) | |
|
709 | 696 | }); |
|
710 |
} |
|
|
711 | return this.state_change; | |
|
697 | } | |
|
698 | ||
|
699 | // Add the rest of the new list items. | |
|
700 | for (; i < new_models.length; i++) { | |
|
701 | this.views.push(Promise.resolve(create.call(context, new_models[i]))); | |
|
702 | } | |
|
703 | // make a copy of the input array | |
|
704 | this._models = new_models.slice(); | |
|
712 | 705 | }, |
|
713 | 706 | |
|
714 | 707 | remove: function() { |
@@ -718,14 +711,13 b' define(["widgets/js/manager",' | |||
|
718 | 711 | * returns a promise that resolves after this removal is done |
|
719 | 712 | */ |
|
720 | 713 | var that = this; |
|
721 | this.state_change = this.state_change.then(function() { | |
|
714 | return Promise.all(this.views).then(function(views) { | |
|
722 | 715 | for (var i = 0; i < that.views.length; i++) { |
|
723 |
that._remove_view.call(that._handler_context, |
|
|
716 | that._remove_view.call(that._handler_context, views[i]); | |
|
724 | 717 | } |
|
725 | that._models = []; | |
|
726 | 718 | that.views = []; |
|
719 | that._models = []; | |
|
727 | 720 | }); |
|
728 | return this.state_change; | |
|
729 | 721 | }, |
|
730 | 722 | }); |
|
731 | 723 |
General Comments 0
You need to be logged in to leave comments.
Login now