если в списке есть элемент, относящийся к разным спецификациям, и у него есть дочерние элементы, то при клике на него открываются дочерние элементы только первого элемента с подобным названием, который в списке. Причина — строки для скрытия/открытия в структуре DOM имеют одинаковые id и действие срабатывает для первых найденных.
Решение было найдено путём изменения функции hook_row_click, которая находится в файле addons/web/static/src/js/view_tree.js
Код для переопределения функции:
openerp.open_products_mrp = function(instance) {
var module = instance.web;
var QWeb = instance.web.qweb;
module.TreeView = module.TreeView.extend({
hook_row_click: function () {
var self = this;
this.$el.delegate('.treeview-td span, .treeview-tr span', 'click', function (e) {
e.stopImmediatePropagation();
self.activate($(this).closest('tr').data('id'));
});
this.$el.delegate('.treeview-tr', 'click', function () {
var is_loaded = 0,
$this = $(this),
record_id = $this.data('id'),
record = self.records[record_id],
children_ids = record[self.children_field];
if (!$this.parent().hasClass('oe_open')) {
self.getdata(record_id, children_ids, $this.parent());
}
else{
var datalevel = parseInt($this.parent().attr('data-level'));
$($this.parent().nextAll('tr')).each(function() {
datalevel_this = parseInt($(this).attr('data-level'));
if(datalevel_this>datalevel){
$(this).remove();
}
else return false;
});
$this.parent().removeClass();
}
});
},
getdata: function (id, children_ids, curr_node) {
var self = this;
self.dataset.read_ids(children_ids, this.fields_list()).done(function(records) {
_(records).each(function (record) {
self.records[record.id] = record;
});
if (curr_node) {
var $curr_node = $(curr_node);
} else {
var $curr_node = self.$el.find('#treerow_' + id);
}
var children_rows = QWeb.render('TreeView.rows', {
'records': records,
'children_field': self.children_field,
'fields_view': self.fields_view.arch.children,
'fields': self.fields,
'level': $curr_node.data('level') || 0,
'render': instance.web.format_value,
'color_for': self.color_for
});
if ($curr_node.length) {
$curr_node.addClass('oe_open');
$curr_node.after(children_rows);
} else {
self.$el.find('tbody').html(children_rows);
}
});
}
});
};
UPD: готовый модуль для версии 7.0 доступен по адресу openerp-russia.ru/download/tt_mrp_bom_tree_view.tar.gz]]>