在加载所有记录并调用 fields_view_get 函数后动态触发 Odoo fields_view_get
Posted
技术标签:
【中文标题】在加载所有记录并调用 fields_view_get 函数后动态触发 Odoo fields_view_get【英文标题】:Trigger Odoo fields_view_get dynamically after all records being loaded and fields_view_get function called 【发布时间】:2018-02-05 10:02:21 【问题描述】:我想在完成一些功能后动态触发fields_view_get
功能。我覆盖函数fields_view_get
并返回我的结果。这仅在第一次调用实际函数时才对 XML 视图产生影响。所以我需要刷新视图以影响 arch 上的新值。
有没有什么方法可以让 odoo 视图在第一次调用fields_view_get
函数后得到改变?
我的尝试:
# here fields view get changes the button string from getting arch
# I overrided the fields_view_get on event model and its get affected and works
# perfectly when I click on main menu Event.but not after the records loaded.
@api.multi
def send_mail_event(self):
x = self.event_id.fields_view_get(view_id=None, view_type='form', toolbar=False, submenu=False)
self.send_mail_event_reg_link(test=True)
return x
【问题讨论】:
您能否详细说明您尝试实现的目标。 只需要触发fields_view_get函数,但是odoo只调用一次,在加载所有数据后,它使用加载内容的操作,实际上我试图用其他数据更改按钮字符串。但它唯一的 getr 在 relaod 后受到影响。所以我试图调用fields view get。但是它没有生效@Heroic 您可以添加多个按钮并根据条件使其可见或不可见,而不是这样做。比如 attrs="'invisible': [('show_leaves','=', False)]" 其实我是在添加数据,即用字符串的邮件队列的下一次执行时间 您可以通过添加状态按钮来做到这一点,因为您必须添加一个字段并将执行时间写入该特定字段,然后添加状态按钮。 【参考方案1】:fields_view_get
在https://github.com/odoo/odoo/blob/10.0/odoo/models.py#L1334 处从load_views
调用,load_views
在https://github.com/odoo/odoo/blob/10.0/addons/web/static/src/js/view_manager.js#L130 处由 Web 客户端的视图管理器调用
现在,在 view_manager.js
中查看 load_view
的调用时间和时间。
我们可以看到它在https://github.com/odoo/odoo/blob/10.0/addons/web/static/src/js/view_manager.js#L182 被调用,这是我们感兴趣的调用。
如果您在 widget.js 上看到,willStart
函数在小部件附加到它管理的 DOM 时被调用。加载 dom 时,附件只发生一次。
所以,回顾一下,fields_view_get
在页面加载时运行一次,如果你想再次调用它,你需要从 js/web 客户端调用load_views
javascript 函数。
但通常在 Odoo 中,尽可能避免使用 Web 客户端扩展。如果您想根据用户的操作对当前视图进行更改,您可以使用onchange
或任何其他后端挂钩。
【讨论】:
github.com/odoo/odoo/blob/… 我从这里解决了我的问题以上是关于在加载所有记录并调用 fields_view_get 函数后动态触发 Odoo fields_view_get的主要内容,如果未能解决你的问题,请参考以下文章
使用 Ionic 框架在登录/注销时清除历史记录并重新加载页面
如何从应用程序域中所有加载的程序集中获取所有静态类并使用反射调用静态方法