2016-11-08 1 views
1

Привет, я застрял в создании виджета, который отображает пользовательское содержимое html в виде формы, я не знаю, как следовать. Вот мой кодodoo create custom backend form widget для рендеринга html view

ЯШ:

(function (instance) { 
    var _t = instance.web._t, 
     _lt = instance.web._lt; 
    var QWeb = instance.web.qweb; 

    console.log('hi..........'); // Custome message to dispaly on console 
    openerp.my_module = function (instance, local) { 
     console.log(instance); 
     instance.web.form.widgets.add('my_module.home', 'instance.my_module.Home'); 
     instance.my_module.Home = instance.web.form.FormView.extend({ 
      template: 'my_template', 
      init: function (view, code) { 
       console.log("::: INIT"); 
      }, 
      start: function() { 
       console.log("::: START"); 
      } 
     }); 

    } 
})(openerp); 

шаблон XML

<?xml version="1.0" encoding="UTF-8"?> 
    <templates id="template" xml:space="preserve"> 
     <t t-name="my_template"> 
      <div> 
       Template content 
      </div> 
     </t> 
    </templates> 

На данный момент только показать в терминале 'hi..........' и экземпляр объекта, но никогда не запустить виджет код. Так что мои вопросы. Как использовать его в конфигурации формы и если i'm то здесь отсутствует

<record id="view_form_my_module" model="ir.ui.view"> 
     <field name="name">My Module</field> 
     <field name="model">my.module</field> 
     <field name="arch" type="xml"> 
      <form> 
       <sheet> 
        **HOW TO ISE IT HERE** 
       </sheet> 
      </form> 
     </field> 
    </record> 

ответ

2

Она смотрит на меня, как вы можете действительно хотите использовать FormWidget, а не расширение FormView. Я не специалист по расширению javascript. Однако если вы следуете документации для The Form View Custom Widgets найдено here, вам может быть проще выполнить то, что вы собираетесь делать. Также легко отбросить виджет в любом виде, используя тег <widget/>.

local.YourWidgetClassName = instance.web.form.FormWidget.extend({ 
    start: function() { 
     this._super(); 
     this.display_html(); 
    }, 
    display_html: function() { 
     this.$el.html(QWeb.render("your_qweb_template", { 
      "arg1": "Hello", 
      "arg2": "World", 
     })); 
    } 
}); 

instance.web.form.custom_widgets.add('widget_tag_name', 'instance.your_addon_name.YourWidgetClassName'); 

Теперь у вас qweb я бы назвал это так.

<widget type="widget_tag_name"></widget> 
+0

когда я использую <виджет типа = "my_template" /> Тег odoo trwos эту ошибку 'web.assets_backend.js: 3600 Uncaught TypeError: OBJ не constructor' – efirvida

+0

Я хотел бы быть более полезным. Я взял то, что содержится в документации, вставило его в свой ответ и внесло некоторые корректировки (в качестве примера). Похоже, что он ненавидит что-то о определении вашей функции 'start'. Если это не сработает, я дам полный рабочий пример позже. –

+0

Попробуйте начать с модифицированной версией FormWidget с использованием ванили из документации. После того, как вы заменили свои имена аддонов и имена классов тем, что имеет смысл для вашего аддона. Затем наполняйте его содержимым. Если ваш qweb говорит '

HELLO WORLD

', и вы можете заставить его появиться на экране, тогда вы можете начать движение вперед. –