[imp] improvements related to embedded views.
bzr revid: nicolas.vanhoren@openerp.com-20110606070451-vn321aqrzi28akgj
This commit is contained in:
parent
7c1c638fe5
commit
aece1cf7c1
|
@ -461,15 +461,20 @@ class View(openerpweb.Controller):
|
|||
Model = request.session.model(model)
|
||||
fvg = Model.fields_view_get(view_id, view_type, request.context,
|
||||
toolbar, submenu)
|
||||
self.process_view(request.session, fvg, request.context, transform)
|
||||
return fvg
|
||||
|
||||
def process_view(self, session, fvg, context, transform):
|
||||
if transform:
|
||||
evaluation_context = request.session.evaluation_context(
|
||||
request.context or {})
|
||||
xml = self.transform_view(
|
||||
fvg['arch'], request.session, evaluation_context)
|
||||
evaluation_context = session.evaluation_context(context or {})
|
||||
xml = self.transform_view(fvg['arch'], session, evaluation_context)
|
||||
else:
|
||||
xml = ElementTree.fromstring(fvg['arch'])
|
||||
fvg['arch'] = Xml2Json.convert_element(xml)
|
||||
return fvg
|
||||
for field in fvg["fields"].values():
|
||||
if field["views"]:
|
||||
for view in field["views"].values():
|
||||
self.process_view(session, view, None, transform)
|
||||
|
||||
def normalize_attrs(self, elem, context):
|
||||
""" Normalize @attrs, @invisible, @required, @readonly and @states, so
|
||||
|
|
|
@ -31,15 +31,24 @@ openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormV
|
|||
this.touched = false;
|
||||
this.flags = this.view_manager.flags || {};
|
||||
},
|
||||
start: function(fields_view) {
|
||||
start: function() {
|
||||
//this.log('Starting FormView '+this.model+this.view_id)
|
||||
if (fields_view) {
|
||||
return $.Deferred().then(this.on_loaded).resolve({fields_view: fields_view});
|
||||
if (this.embedded_view) {
|
||||
return $.Deferred().then(this.on_loaded).resolve({fields_view: this.embedded_view});
|
||||
} else {
|
||||
return this.rpc("/base/formview/load", {"model": this.model, "view_id": this.view_id,
|
||||
toolbar:!!this.flags.sidebar}, this.on_loaded);
|
||||
}
|
||||
},
|
||||
/**
|
||||
* Directly set a view to use instead of calling fields_view_get. This method must
|
||||
* be called before start().
|
||||
*
|
||||
* @param embedded_view A view.
|
||||
*/
|
||||
set_embedded_view: function(embedded_view) {
|
||||
this.embedded_view = embedded_view;
|
||||
},
|
||||
on_loaded: function(data) {
|
||||
var self = this;
|
||||
this.fields_view = data.fields_view;
|
||||
|
@ -995,7 +1004,6 @@ openerp.base.form.FieldMany2One = openerp.base.form.Field.extend({
|
|||
openerp.base.form.FieldOne2Many = openerp.base.form.Field.extend({
|
||||
init: function(view, node) {
|
||||
this._super(view, node);
|
||||
debugger;
|
||||
this.template = "FieldOne2Many";
|
||||
this.is_started = $.Deferred();
|
||||
this.is_setted = $.Deferred();
|
||||
|
@ -1014,7 +1022,17 @@ openerp.base.form.FieldOne2Many = openerp.base.form.Field.extend({
|
|||
self.on_ui_change();
|
||||
});
|
||||
|
||||
var views = [ [false,"list"], [false,"form"] ];
|
||||
var modes = this.node.attrs.mode;
|
||||
modes = !!modes ? modes.split(",") : ["tree", "form"];
|
||||
var views = [];
|
||||
_.each(modes, function(mode) {
|
||||
var view = [false, mode == "tree" ? "list" : mode];
|
||||
if (self.field.views && self.field.views[mode]) {
|
||||
view.push(self.field.views[mode]);
|
||||
}
|
||||
views.push(view);
|
||||
});
|
||||
|
||||
this.viewmanager = new openerp.base.ViewManager(this.view.session,
|
||||
this.element_id, this.dataset, views);
|
||||
this.viewmanager.start();
|
||||
|
|
|
@ -94,9 +94,9 @@ openerp.base.ListView = openerp.base.View.extend( /** @lends openerp.base.ListVi
|
|||
*
|
||||
* @returns {$.Deferred} loading promise
|
||||
*/
|
||||
start: function(fields_view) {
|
||||
start: function() {
|
||||
this.$element.addClass('oe-listview');
|
||||
return this.reload_view(undefined, fields_view);
|
||||
return this.reload_view();
|
||||
},
|
||||
/**
|
||||
* Called after loading the list view's description, sets up such things
|
||||
|
@ -254,15 +254,15 @@ openerp.base.ListView = openerp.base.View.extend( /** @lends openerp.base.ListVi
|
|||
*
|
||||
* @param {Boolean} [grouped] Should the list be displayed grouped
|
||||
*/
|
||||
reload_view: function (grouped, fields_view) {
|
||||
reload_view: function (grouped) {
|
||||
var self = this;
|
||||
this.dataset.offset = 0;
|
||||
this.dataset.limit = false;
|
||||
var callback = function (field_view_get) {
|
||||
self.on_loaded(field_view_get, grouped);
|
||||
};
|
||||
if (fields_view) {
|
||||
return $.Deferred().then(callback).resolve({fields_view: fields_view});
|
||||
if (this.embedded_view) {
|
||||
return $.Deferred().then(callback).resolve({fields_view: this.embedded_view});
|
||||
} else {
|
||||
return this.rpc('/base/listview/load', {
|
||||
model: this.model,
|
||||
|
@ -271,6 +271,15 @@ openerp.base.ListView = openerp.base.View.extend( /** @lends openerp.base.ListVi
|
|||
}, callback);
|
||||
}
|
||||
},
|
||||
/**
|
||||
* Directly set a view to use instead of calling fields_view_get. This method must
|
||||
* be called before start().
|
||||
*
|
||||
* @param embedded_view A view.
|
||||
*/
|
||||
set_embedded_view: function(embedded_view) {
|
||||
this.embedded_view = embedded_view;
|
||||
},
|
||||
/**
|
||||
* re-renders the content of the list view
|
||||
*/
|
||||
|
|
|
@ -95,7 +95,8 @@ openerp.base.ViewManager = openerp.base.Controller.extend({
|
|||
self.on_mode_switch($(this).data('view-type'));
|
||||
});
|
||||
_.each(this.views_src, function(view) {
|
||||
self.views[view[1]] = { view_id: view[0], controller: null };
|
||||
self.views[view[1]] = { view_id: view[0], controller: null,
|
||||
embedded_view: view[2]};
|
||||
});
|
||||
if (this.flags.views_switcher === false) {
|
||||
this.$element.find('.oe_vm_switch').hide();
|
||||
|
@ -119,6 +120,9 @@ openerp.base.ViewManager = openerp.base.Controller.extend({
|
|||
// Lazy loading of views
|
||||
var controllerclass = openerp.base.views.get_object(view_type);
|
||||
var controller = new controllerclass( this, this.session, this.element_id + "_view_" + view_type, this.dataset, view.view_id);
|
||||
if (view.embedded_view) {
|
||||
controller.set_embedded_view(view.embedded_view);
|
||||
}
|
||||
view_promise = controller.start();
|
||||
var self = this;
|
||||
$.when(view_promise).then(function() {
|
||||
|
|
Loading…
Reference in New Issue