2

我正在尝试解决“基于工作流状态的不同权限”问题,但我正在努力解决这样一个事实,即似乎不可能“随时”获取当前对象的 id,而这是获取该对象的许可。我的意思是,我设法在jquery bbq 文档之后从客户端状态获取它,例如:

$.bbq.getState().id

但看起来这只有在完整的页面加载后才可行。我通过在主视图事件中放置一些警报来对此进行调查,例如:

openerp.web.PageView = openerp.web.PageView.extend({
    on_loaded: function(data) {
        this._super(data);
        alert('page load ' + $.bbq.getState().id);
    },
    do_show: function() {
        this._super();
        alert('page show ' + $.bbq.getState().id);
    },
    reload: function() {
        this._super();
        alert('page reload ' + $.bbq.getState().id);
    },
    on_record_loaded: function(record) {
        this._super(record);
        alert('record loaded ' + $.bbq.getState().id);
    }
});

我发现当您打开页面视图时(例如,通过单击搜索视图中的项目),您总是得到“未定义”。

然后,当使用分页导航从一个对象传递到另一个对象时,您可以将其放入“reload”和“on_record_loaded”。然后,当您单击“编辑”按钮时,您会再次错过它。

在表单视图中,我仅在第一次加载时成功获得它,因为似乎一些缓存就位。因此,如果我将一个 pdb 放入 Web 客户端的 fields_view_get 中,然后将其放入“init_view”表单中:

var ids = [];
if ($.bbq.getState().id){
    ids = [parseInt($.bbq.getState().id)];
}
console.log(ids);
return this.rpc("/web/view/load", {
    "model": this.model,
    "view_id": this.view_id,
    "view_type": "form",
    toolbar: this.options.sidebar,
    context: context,
    ids: ids,
    }, this.on_loaded);

我只在第一次加载页面时得到它。如果我从

this.dataset.ids

我查看了核心 Web 模块的任何地方,但找不到合适的 API,而且看起来很奇怪(尤其是在数据集上),我们没有正确的方法来获取/处理当前记录。甚至上下文和会话也没有任何相关信息。

可能我应该在第一次加载时将其存储到视图本身中......

在此先感谢您的任何指点。

4

2 回答 2

1

尝试:

this.view.datarecord.id

表单视图中的 OpenERP 7:使用 google chrome 进行调试

于 2013-07-10T04:49:32.300 回答
0

尝试组合

this.dataset.idsthis.dataset.index

喜欢 curr_id = this.dataset.ids[this.dataset.index]

这可能会解决您的问题。

于 2012-06-22T08:03:30.927 回答