Odoo: Пользовательская кнопка в заголовке дерева ODOO не запускает функцию Python - PullRequest
0 голосов
/ 06 сентября 2018

Основная информация :

Версия Odoo : 10.0

имя модуля : simcard

название модели : simcard.simcard

Цель : добавить кнопку Sync в заголовок дерева и связать ее с функцией python.

Мой файл шаблона (template.xml):

<?xml version="1.0" encoding="UTF-8"?>

<templates id="template" xml:space="preserve">

 <t t-extend="ListView.buttons">

    <t t-jquery="button.o_list_button_add" t-operation="replace">

        <t t-if="widget.model=='simcard.simcard'">

            <button class="btn btn-sm btn-default sync_button" type="button" >Sync</button>

        </t>

    </t>

</t>

</templates>

Мой файл JavaScript (tree_view_button.js):

odoo.define('simcard.tree_view_button', function (require){"use strict";
    var ListView = instance.web.ListView;
    ListView.include({
    render_buttons: function() {

   // GET BUTTON REFERENCE
    this._super.apply(this, arguments)
    if (this.$buttons) {
    var btn = this.$buttons.find('.sync_button')
    }

   // PERFORM THE ACTION
    btn.on('click', this.proxy('do_sync'))

   },
    do_sync: function() {
    new instance.web.Model('simcard.simcard')
    .call('my_function', [[]])
    .done(function(result) {
    alert('done')
    })
    }
    });
   }

Функция моего файла python (models.py):

  def my_function(self): 
    print 'fooooooooooooooo' 

Мой файл просмотра (view.xml):

   <?xml version="1.0" encoding="utf-8"?>
   <odoo>
    <data>
     <template id="assets_backend" name="tree view menu" 
      inherit_id="web.assets_backend">               
        <xpath expr="." position="inside">                   
           <script type="text/javascript" 
               src="simcard/static/js/tree_view_button.js"> 
           </script>               
        </xpath>           
    </template> 
  </data>
 </odoo>

Мой файл манифеста:

  # -*- coding: utf-8 -*-
 {
'name': "simcard",

'summary': """
    Store them""",

'description': """
    Store them""",


# Categories can be used to filter modules in modules listing
# Check https://github.com/odoo/odoo/blob/master/odoo/addons/base/module/module_data.xml
# for the full list
'category': 'Uncategorized',
'version': '0.1',

# any module necessary for this one to work correctly
'depends': ['base'],

# always loaded
'data': [
    # 'security/ir.model.access.csv',
    'views/views.xml',
    'views/templates.xml',
],

'qweb': ['static/xml/tree_view_button.xml'],

# only loaded in demonstration mode
'demo': [
    'demo/demo.xml',
],
'installable': True,
'auto_install': False,
'application': True,
}

Кнопка синхронизации появляется в заголовке дерева, но я не могу вызвать свою функцию, когда нажимаю на эту кнопку. Я что-то пропустил?

1 Ответ

0 голосов
/ 06 сентября 2018

В вашем js-коде есть ошибки, следующий код должен работать как положено

odoo.define('simcard_piavita.tree_view_button', function (require){
"use strict";
    var ListView = require('web.ListView');
    var Model = require('web.DataModel');
    ListView.include({
        render_buttons: function() {
            this._super.apply(this, arguments)
            if (this.$buttons) {
                var btn = this.$buttons.find('.sync_button')
                btn.on('click', this.proxy('do_sync'))
            }
       },
        do_sync: function() {
            new Model('simcard_piavita.simcard_piavita')
                .call('my_function', [[]])
                .done(function(result) {
                    alert('done')
                })
        }
    });
});
...