Amit Patel (OpenERP) has proposed merging 
lp:~openerp-dev/openerp-web/trunk-10clicks-sale-apa into lp:openerp-web.

Requested reviews:
  OpenERP R&D Web Team (openerp-dev-web)

For more details, see:
https://code.launchpad.net/~openerp-dev/openerp-web/trunk-10clicks-sale-apa/+merge/132859
-- 
https://code.launchpad.net/~openerp-dev/openerp-web/trunk-10clicks-sale-apa/+merge/132859
Your team OpenERP R&D Team is subscribed to branch 
lp:~openerp-dev/openerp-web/trunk-10clicks-sale-apa.
=== modified file 'addons/web/static/src/js/view_tree.js'
--- addons/web/static/src/js/view_tree.js	2012-10-03 12:28:36 +0000
+++ addons/web/static/src/js/view_tree.js	2012-11-05 10:30:32 +0000
@@ -32,6 +32,7 @@
         this.view_id = view_id;
 
         this.records = {};
+        this.selection ={};
 
         this.options = _.extend({}, this.defaults, options || {});
 
@@ -63,10 +64,11 @@
         }
         return fields;
     },
-    store_record:function(records){
+    store_record:function(records, has_toolbar){
         var self = this;
         _(records).each(function (record) {
             self.records[record.id] = record;
+            if (has_toolbar) self.selection[record.id] = record;
         });
     },
     on_loaded: function (fields_view) {
@@ -91,31 +93,29 @@
             'toolbar': has_toolbar
         }));
         this.$el.addClass(this.fields_view.arch.attrs['class']);
-
         this.dataset.read_slice(this.fields_list()).then(function(records) {
-            self.store_record(records);
+            self.store_record(records, has_toolbar);
             if (!has_toolbar) {
                 // WARNING: will do a second read on the same ids, but only on
                 //          first load so not very important
                 self.render_data({'null':records})
-                self.getdata(_.pluck(records,"id"));
                 return;
             }
 
             var $select = self.$el.find('select')
                 .change(function () {
                     var $option = $(this).find(':selected');
-                    self.getdata($option.val());
+                    //clear records for create new tree view
+                    self.records = {}
+                    self.load_children(self.selection[$option.val()])
                 });
+                
             _(records).each(function (record) {
-                self.records[record.id] = record;
                 $('<option>')
                         .val(record.id)
                         .text(record.name)
-                        .data('children', record[self.children_field])
                     .appendTo($select);
             });
-
             if (!_.isEmpty(records)) {
                 $select.change();
             }
@@ -145,7 +145,9 @@
         var self = this;
         var tr = this.$el.find(".oe-treeview-table tbody tr[id^='treerow_']");
         _.each(tr,function(rec){
-            self.showcontent($(rec).attr('data-id'),true);
+            var record_id = $(rec).attr('data-id')
+            self.load_children(self.records[record_id])
+            self.showcontent(record_id, true);
         });
     },
     collpase_all: function(){
@@ -196,27 +198,27 @@
             var $this = $(this),
                 record_id = $this.data('id'),
                 bool = $this.parent().hasClass('oe_open');
+                if (!bool) self.load_children(self.records[record_id])
                 self.showcontent(record_id, !bool);
         });
     },
-    // get child data of selected value
-    getdata: function (id) {
-        var self = this;
-        var parent_child ={};
-        id = _.isArray(id)?id:parseInt(id); 
-        var ir_model_data = new instance.web.Model(this.model,self.dataset.get_context() || {},[['id','child_of',id]]).query();
-        ir_model_data._execute().then(function(records){
-              self.store_record(records);
-             _.each(records,function(rec){
-                 if(rec[self.children_field].length === 0)return;
-                 parent_child[rec.id] = [];
-                 _.each(rec[self.children_field],function(key){
-                     parent_child[rec.id].push(self.records[key]);
-                 });
-             })
-             self.render_data(parent_child);
-        });
+    
+    // get child data of selected record
+    load_children : function(record){
+        self = this;
+        //skip AJAX if children are already loaded
+        if ( !self.records[_.first(record[this.children_field])]){
+            var ir_model_data = new instance.web.Model(self.model, self.dataset.get_context() || {}, [['id','in',record[this.children_field]]]).query();
+            ir_model_data._execute().then(function(records){ 
+                self.store_record(records)
+                var add_children = {};
+                add_children[record.id] = records;
+                self.render_data(add_children)
+            })
+        }
     },
+    
+ 
     render_data: function(groupby){
         var self = this;
         _.each(_.keys(groupby),function(key){
@@ -238,7 +240,6 @@
                 self.$el.find('tbody').html(children_rows);
             }
         });
-        self.collpase_all();
     },
 
 

_______________________________________________
Mailing list: https://launchpad.net/~openerp-dev-gtk
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~openerp-dev-gtk
More help   : https://help.launchpad.net/ListHelp

Reply via email to