Browse Source

Fixed tagsinput bug related to shallow clone of dashboard

Torkel Ödegaard 12 years ago
parent
commit
9fc6d3d6f0
2 changed files with 9 additions and 21 deletions
  1. 6 19
      src/app/directives/bootstrap-tagsinput.js
  2. 3 2
      src/app/services/dashboard.js

+ 6 - 19
src/app/directives/bootstrap-tagsinput.js

@@ -53,10 +53,6 @@ function (angular, $) {
               scope.$parent[attrs.tagclass] : function() { return attrs.tagclass; }
           });
 
-          for (var i = 0; i < scope.model.length; i++) {
-            select.tagsinput('add', scope.model[i]);
-          }
-
           select.on('itemAdded', function(event) {
             if (scope.model.indexOf(event.item) === -1) {
               scope.model.push(event.item);
@@ -74,25 +70,16 @@ function (angular, $) {
           // diff when model changes
           var prev = scope.model.slice();
           scope.$watch("model", function() {
-
-            var added = scope.model.filter(function(i) {return prev.indexOf(i) === -1;}),
-                removed = prev.filter(function(i) {return scope.model.indexOf(i) === -1;}),
-                i;
-
-            prev = scope.model.slice();
-
-            // Remove tags no longer in binded model
-            for (i = 0; i < removed.length; i++) {
-              select.tagsinput('remove', removed[i]);
+            if (!angular.isArray(scope.model)) {
+              scope.model = [];
             }
 
-            // Refresh remaining tags
-            select.tagsinput('refresh');
+            select.tagsinput('removeAll');
 
-            // Add new items in model as tags
-            for (i = 0; i < added.length; i++) {
-              select.tagsinput('add', added[i]);
+            for (var i = 0; i < scope.model.length; i++) {
+              select.tagsinput('add', scope.model[i]);
             }
+
           }, true);
 
         }

+ 3 - 2
src/app/services/dashboard.js

@@ -120,7 +120,8 @@ function (angular, $, kbn, _, config, moment, Modernizr) {
     };
 
     var dash_defaults = function(dashboard) {
-      _.defaults(dashboard,_dash);
+
+      _.defaults(dashboard, _dash);
       _.defaults(dashboard.loader,_dash.loader);
 
       var filtering = _.findWhere(dashboard.pulldowns, {type: 'filtering'});
@@ -153,7 +154,7 @@ function (angular, $, kbn, _, config, moment, Modernizr) {
       dashboard = dash_defaults(dashboard);
 
       // Set the current dashboard
-      self.current = _.clone(dashboard);
+      self.current = angular.copy(dashboard);
 
       // Delay this until we're sure that querySrv and filterSrv are ready
       $timeout(function() {