2017-06-21 166 views
3

我迄今已是基本的代碼:如何在Odoo JavaScript中打開某些表單視圖並更改其字段?

odoo.define('partner_data.res_partner_widget', function(require) { 
"use strict"; 

    var core = require('web.core'); 
    var Dialog = require('web.Dialog'); 
    var form_common = require('web.form_common'); 
    var Widget = require('web.Widget'); 

    var Model = require('web.Model'); 

    var _t = core._t; 
    var QWeb = core.qweb; 

    console.log('JS loaded'); 

    $(document).on('ready', function() { 
     console.log('Doc is ready'); 
     $('#FIELD').on('change', function() { 
      // Change value of other fields in this form 

     }); 
    }); 
}); 

問題是整個ODOO系統文件準備好觸發器。並試圖通過其名稱$(#fieldname)找到該字段根本不起作用。

對於這個問題,是否有解決ODOO的具體問題?或者,也許你知道非常好的文檔或例子,解釋ODOO FIELD的變化方法。附:我寫了ODOO,因爲每個人都回答簡單的JQuery風格,這不僅僅是簡單的JQuery,它必須是更具體的與ODOO相關的東西。 或者,也許我可以在字段更改後調用特定窗體視圖的Python函數,類似的東西。我發現的所有odoo文檔都只提供很少或根本沒有關於此的信息。

UPDATE:

感謝@Vishal Khichadiya我有點接近。我通過創建一個小部件來編輯他的答案。現在,當我將這個小部件設置爲隨機場時,讓我們對一些不可見的字段說一下,我可以在任何我想要的字段上使用class class_partner,它將觸發onchange方法。

odoo.define('partner_data.res_partner_widget', function(require) { 
"use strict"; 

var base = require('web_editor.base'); 
var options = require('web_editor.snippets.options'); 
var core = require('web.core'); 
var Dialog = require('web.Dialog'); 
var session = require('web.session'); 
var form_common = require('web.form_common'); 
var Widget = require('web.Widget'); 

var Model = require('web.Model'); 

var _t = core._t; 
var QWeb = core.qweb; 

var onchange_js_method_test = form_common.AbstractField.extend({ 
    start: function() { 
     this._super(); 
     var self = this; 
     $('body').on('change', '.class_partner', function() { 
      console.log('start triggered'); 
      console.log(self) 
      // Change value of other fields in this form 
      //you can call python function from here to set your value 
     }); 
    } 
}); 
core.form_widget_registry.add('onchange_js_method_test', onchange_js_method_test); 
}); 

XML:

<field name="random_invisible" " widget="onchange_js_method_test"/> 
<field name="on_this_field_onchange_triggers" class="class_partner"/> 
+1

您應該將java標記更改爲javascript。儘管他們的名字是他們不相關的編程語言。 –

+0

你爲什麼試圖在那裏發起一個onchange事件(JS)?你的目標是什麼? – CZoellner

+0

每當#FIELD值發生變化時,我需要更改其他字段的值,並且如果您希望建議我使用Python來做到這一點,否則它不會工作。 – enigmq

回答

1

首先你需要設置類屬性的XML代碼到Python提交的。 例如:

<field name="partner_id" class="class_partner" /> 

那麼你需要這個JS中,也可以添加這個js文件assets_backend。

odoo.define('partner_data.res_partner_widget', function(require) { 
    "use strict"; 

     var core = require('web.core'); 
     var Dialog = require('web.Dialog'); 
     var form_common = require('web.form_common'); 
     var Widget = require('web.Widget'); 

     var Model = require('web.Model'); 

     var _t = core._t; 
     var QWeb = core.qweb; 
     var my_widget = Widget.extend({ 
      start: function() { 
       this._super(); 
       var self = this; 
       $('body').on('change', '.class_partner',function() { 
        // Change value of other fields in this form 
        //you can call python function from here to set your value 
       }); 
      }, 
     }); 
     core.action_registry.add('my_widget', my_widget); 
     return my_widget; 
    }); 
+0

您好,感謝您的回答@Vishal Khichadiya,我得到這個錯誤:「Uncaught SyntaxError:在嚴格模式代碼中,函數只能在頂層或塊內聲明。」我猜測開始:函數必須進入一些東西,可能是另一個函數,正如我在源代碼中看到的,它們在Widget中使用。延長或上課,延長 – enigmq

+0

我已修復它。 對不起,這是我的錯誤。 –

+0

注意到一些事情,這種方法不會觸發many2one領域(可能many2many和one2many以及),任何想法我怎麼能實現這一點? – enigmq

相關問題