【问题标题】:Odoo 8: Set client field value from javascriptOdoo 8:从 javascript 设置客户端字段值
【发布时间】:2015-08-26 14:09:15
【问题描述】:

如何使用javascript(在客户端)设置字段的值?

在我的视图的 XML 文件中,我有:

<field name="zip" />
<field name="city" class="city" />

当 zip 更改时,我想查找并设置城市(我可以在服务器端使用 @api.onchange 方法执行此操作,但出于性能原因,我更喜欢客户端)。

查找有效,我可以设置值:

$('span.city input').val(city);

这会将城市放在输入字段中,但客户端不会意识到更改(例如,我有一个服务器端 onchange 方法来处理其他字段,并且此方法不会获取新的城市值) .

据我所知,我应该在字段上调用 ​​set_value(city),但是如何找到合适的对象来调用该方法?

【问题讨论】:

  • 请与 as 分享您的代码以获取更多详细信息并更恰当地帮助您。
  • 代码相当复杂(而且很长),但基本问题其实很简单:从 javascript 中设置字段值的正确方法是什么?我知道会有很多“取决于”,但任何可以让我更接近解决方案的提示或示例都是受欢迎的。

标签: odoo odoo-8


【解决方案1】:

请查看static/src/js/timesheet.js 中的hr_timesheet_sheet 模块。它将让您清楚地了解如何创建字段并为其赋值。

【讨论】:

  • 感谢您的建议。我想我可以使用 field_manager.set_values(...),但这需要一种使用 field_manager 查找对象的方法。如何找到具有可用 field_manager 的对象?
【解决方案2】:

我找到了解决方案。在我的 zip 小部件中,我找到父级并保存字段列表:

openerp.zip_widget = function(instance) {
    var _t = instance.web._t,
        _lt = instance.web._lt;
    var QWeb = instance.web.qweb;
    var fields; // <-- Variable to keep the field list

    instance.web.form.widgets.add('zip', 'instance.zip_widget.zip_lookup');
    instance.zip_widget.zip_lookup = instance.web.form.FieldChar.extend({
        template: "zip_widget",
        start: function() {
            this._super();
            fields = this.getParent().fields; // <-- Get the field list
        },

现在我可以使用fields.city.set_value(...); 设置字段值

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-07
    • 1970-01-01
    • 1970-01-01
    • 2011-10-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多