javascript - odoo 表单视图从 js 更新另一个字段的值
问题描述
我有一个自定义小部件,它应该在我的模型中设置另一个字段的值。我通过在我的字段模型中执行从 JS 到 setter 的 RPC 来实现这一点。这可行,但新值不会立即显示在 UI 中。所以要查看我必须刷新页面的值。
有没有办法使用 JS 更新表单视图?
从自定义小部件在模型内设置值的正确方法是什么?
例子
我有一个字段 A 和一个字段 C。C 有一个自定义小部件,例如一个按钮。单击按钮时,应更改 A 的值。问题是如何从字段 B 的自定义小部件更新字段 A?
笔记
我在使用 Odoo 11,它改变了很多 JS API,我想
解决方案
我检查了更新字段的方式之间的区别:您的方式和基本的键盘输入方式。不同之处在于当您更新方式时,服务器不会调用 onchange。
js文件
odoo.define('theme_address.theme', function (require) {
"use strict";
var Widget= require('web.Widget');
var widgetRegistry = require('web.widget_registry');
var changeTitle = function() {
opp_name.value = value_input.value;
};
var MyWidget = Widget.extend({
template: 'sigPad',
events: {
'click .your_class': 'change_opp_name',
},
change_opp_name: function () {
var opp_name = document.getElementById("o_field_input_21");
var value_input = document.getElementById('value_input');
var change_opp_name_button = document.getElementById('change_opp_name_button');
var event = new Event('change');
change_opp_name_button.addEventListener('change', changeTitle(), false);
opp_name.dispatchEvent(event);
}
});
widgetRegistry.add(
'my_widget', MyWidget
);
return MyWidget;
});
模板
<?xml version="1.0" encoding="utf-8"?>
<templates>
<t t-name="sigPad">
<div>
<input type="text" id="value_input" class="form-control" style="max-width: 400px; width: 150px"/>
<input type="button" id="change_opp_name_button" class="your_class" value="Submit"/>
</div>
</t>
</templates>
我ll continue looking into more methods of doing that, i
被告知至少还有另外两种方法可以像这样更新它。
推荐阅读
- c# - 如何将多个 SQL 数据列存储到不同的变量 C#
- html - 如何自动扩展弹性项目以防止项目水平溢出?
- laravel - 在 laravel 中,如何在用户列表中通过 role_id 显示角色名称?
- realm-mobile-platform - Xamarin 迁移:领域到 mongodb 领域
- reactjs - 错误:无效的挂钩调用我该如何解决?
- javascript - 如何将画布元素移动到另一个画布元素之上
- angular-cli - Angular12 Upgarde:警告:由于选择器错误而跳过了 1 条规则:.k-input-label:dir(rtl) -> unmatched pseudo-class :dir
- mysql - 我的 MySQL 是否被使用 nginx 的monit监控?
- javascript - MySQL条件过滤器处理
- python - Python中readline、readlines、read等常用接口是什么