[ADD] render rows again, yay

TODO: fix dataset/listview call?

bzr revid: xmo@openerp.com-20110518090630-k2owbldv2tvu8tfv
This commit is contained in:
Xavier Morel 2011-05-18 11:06:30 +02:00
parent b3050bc14d
commit abd7b1898b
1 changed files with 44 additions and 14 deletions

View File

@ -55,7 +55,7 @@ openerp.base.ListView = openerp.base.View.extend( /** @lends openerp.base.ListVi
this.options = _.extend({}, this.defaults, options || {}); this.options = _.extend({}, this.defaults, options || {});
this.groups = new openerp.base.ListView.Groups({ this.groups = new openerp.base.ListView.Groups(this, {
options: this.options, options: this.options,
columns: this.columns columns: this.columns
}); });
@ -410,11 +410,6 @@ openerp.base.ListView.List = Class.extend( /** @lends openerp.base.ListView.List
} }
this.$current = this.$_element.clone(true); this.$current = this.$_element.clone(true);
this.$current.empty().append($(QWeb.render('ListView.rows', this))); this.$current.empty().append($(QWeb.render('ListView.rows', this)));
return this.$current;
},
refresh: function () {
this.render();
return this;
}, },
/** /**
* Gets the ids of all currently selected records, if any * Gets the ids of all currently selected records, if any
@ -460,7 +455,8 @@ openerp.base.ListView.Groups = Class.extend( /** @lends openerp.base.ListView.Gr
* Provides events similar to those of * Provides events similar to those of
* :js:class:`~openerp.base.ListView.List` * :js:class:`~openerp.base.ListView.List`
*/ */
init: function (opts) { init: function (view, opts) {
this.view = view;
this.options = opts.options; this.options = opts.options;
this.columns = opts.columns; this.columns = opts.columns;
this.datagroup = {}; this.datagroup = {};
@ -483,9 +479,22 @@ openerp.base.ListView.Groups = Class.extend( /** @lends openerp.base.ListView.Gr
self.render_groups(groups), self.render_groups(groups),
$row[0].nextSibling); $row[0].nextSibling);
}, function (dataset) { }, function (dataset) {
$row.parent()[0].insertBefore( // Now we need to split the current tbody in order to
self.render_dataset(dataset), // insert the list's
$row[0].nextSibling);
// Create new tbody after current one
var $current_body = $row.closest('tbody');
var $next_siblings = $row.nextAll();
if ($next_siblings.length) {
var $split = $('<tbody>').insertAfter($current_body);
// Move all following siblings of current row to split
$split.append($row.nextAll());
}
// Insert list rendering after current tbody
self.render_dataset(dataset).then(function (list) {
$current_body.after(list.$current);
});
}); });
}); });
placeholder.appendChild($row[0]); placeholder.appendChild($row[0]);
@ -507,11 +516,28 @@ openerp.base.ListView.Groups = Class.extend( /** @lends openerp.base.ListView.Gr
return placeholder; return placeholder;
}, },
render_dataset: function (dataset) { render_dataset: function (dataset) {
return new openerp.base.ListView.List({ var self = this;
var rows = [];
var list = new openerp.base.ListView.List({
options: this.options, options: this.options,
columns: this.columns, columns: this.columns,
rows: [] // insert *processed* rows here rows: rows
}).render(); });
var d = new $.Deferred();
this.view.rpc('/base/listview/fill', {
model: dataset.model,
id: this.view.view_id,
context: dataset.context,
domain: dataset.domain,
sort: dataset.sort && dataset.sort()
}, function (result) {
rows.splice(0, rows.length);
rows.push.apply(rows, result.records);
list.render();
d.resolve(list);
});
return d.promise();
}, },
render: function () { render: function () {
var self = this; var self = this;
@ -519,7 +545,11 @@ openerp.base.ListView.Groups = Class.extend( /** @lends openerp.base.ListView.Gr
this.datagroup.list(function (groups) { this.datagroup.list(function (groups) {
self.$element.empty()[0].appendChild( self.$element.empty()[0].appendChild(
self.render_groups(groups)); self.render_groups(groups));
}, $.proxy(this, 'render_dataset')); }, function (dataset) {
self.render_dataset(dataset).then(function (list) {
self.$element.empty().after(list.$current);
});
});
return this.$element; return this.$element;
} }
}); });