2013-01-10 13 views
5

Jestem nowy w serwisie WWW openerp, będę wdzięczny za pomoc. Chcę utworzyć widżet licznika czasu zliczania, na przykład w postaci textbox, z przyciskiem uruchamiania i zatrzymania (uwzględnić w moim nowym polu niestandardowym lub osobnym).klient sieci openerp, jak dostosować pole (rozszerzenie podstawowego widgetu)

Zrobiłem małą funkcję javascript, aby zliczyć czas.

Czy mogę utworzyć nowy widget przez rozszerzenie podstawowego FieldChar? Utwórz nowy typ pola?

Gdzie umieścić mój kod licznika i jak wyświetlić go na polu char (lub nowym typie pola)?

znalazłem jakiś dokument o tym, jak rozciągają się z czymś jak openerp.web.form.FieldChar:

openerp.web_mymodule = function(openerp) { 
    openerp.web.form.Field.include({ 
    init: function(view, node) { 
     console.log('mine'); 
     this._super(view, node); 
    } 
    }); 
} 

muszę pewne wskazówki, aby umieścić to wszystko razem nawet z openerp's doc o tym, jak działa interfejs.

góry dzięki

Tu jestem: Moduł: web_uptimer

web_uptimer.js:

openerp.web_uptimer = function (openerp) 
{ 
    openerp.web.form.widgets.add('uptimer', 'openerp.web_uptimer.CountUp'); 
    openerp.web_uptimer.CountUp = openerp.web.form.FieldChar.extend(
     { 
     template : "uptimer.template", 
     init: function (view, code) { 
      this._super(view, code); 
      console.log('counting...'); 
      alert('counting...'); 
     } 
    }); 
} 

web_uptimer.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<templates id="template" xml:space="preserve"> 
<t t-name="uptimer.template"> 
      <html> 
      </html> 
</t> 
</templates> 

mój szybki licznik test timera w górę:

<html> 
    <head> 
     <title></title> 
     <script type="text/javascript"> 
      var counter = 0; 
      var minutes = 0; 
      var hours = 0; 
      var timer; 
      var todisplay; 
      var h2disp; 
      var m2disp; 
      var s2disp; 

      function countUP() 
      { 
       counter = counter + 1;//increment the counter by 1 
       if(counter == 60) 
       { 
        counter = 0; 
        minutes = minutes + 1; 
        if(minutes == 60) 
        { 
         minutes = 0; 
         hours = hours + 1 
        } 
       } 
       if(counter < 10) 
       { 
        s2disp = "0" + counter; 
       } 
       else 
       { 
        s2disp = counter; 
       } 
       if(minutes < 10) 
       { 
        m2disp = "0" + minutes; 
       } 
       else 
       { 
        m2disp = minutes; 
       } 
       if(hours < 10) 
       { 
        h2disp = "0" + hours; 
       } 
       else 
       { 
        h2disp = hours; 
       } 
       todisplay = h2disp + ":" + m2disp + ":" + s2disp; 
       document.getElementById("timer_container").innerHTML = todisplay; 
      } 
     </script> 
    </head> 
    <body onload='timer=setInterval("countUP()", 1000);'> 
     <div id="timer_container">00:00:00</div> 
     <div> 
      <button onclick='clearInterval(timer);'>Stop Timer</button> 
      <button onclick='timer=setInterval("countUP()", 1000);'>Continue Timer</button> 
     </div> 
    </body> 
</html> 
+0

jesteś na dobrej drodze. Zapoznaj się z dokumentacją tutaj: http: //doc.openerp.com/trunk/developers/web/module/na końcu mają przykład widżetu timera! : D Przetestowałem to, ale wydaje się dość wyjaśniające. – TimoSolo

+0

Dzięki za odpowiedź Tymoteusza. Próbuję pobrać _przykladowy_przykladowy. Po pewnych problemach (menuitem tag tag puse error) Udaje mi się wyświetlić licznik (to jest początek !!!), ale przyciski nie wywołują funkcji ... Czy działa on w wersji 6.1? (Zastanawiam się, jak doktor, który mnie powiązałeś, znajduje się w bagażniku). Próbuję uprościć kod (przycisk i alert), ale nie działa. wydaje się, że "zdarzenia" nie działają lub nie są odsłuchiwane ... Masz pomysł? Z góry dziękuję, wciąż się ruszam, więc to dobrze –

Odpowiedz

2

udało mi się zrobić mój licznik jako działanie OpenERP dla procesu, licznik zlicza w górę, wyświetlacz jest aktualizowany itp ...

Teraz chcę tego, by stać się polem OpenERP które mógłbym użyć w formach :

Jestem blisko, ale przyciski nie działają.

Oto mój kod:

nazwa modułu jest web_example:

src/js/first_module.js:

openerp.web_example = function (openerp) { 
     openerp.web.form.widgets.add('FieldUpTimer',  'openerp.web.form.FieldUpTimer'); 
     openerp.web.form.FieldUpTimer = openerp.web.form.FieldChar.extend({ 
     template: 'web_example.action', 
     init: function() { 
      this._super.apply(this, arguments); 
      this._start = null; 
      this._watch = null; 

     }, 

    start: function() { 
     this.$element.find('button#bstart').click(_.bind(this.mystart, this)); 
     this.$element.find('button#bstart').click(this.mystart); 
     this._start = null; 
    }, 

    countUP: function (counter,minutes,hours,timer,todisplay,h2disp,m2disp,s2disp) 
      { 
     var h, m, s; 
     // Subtracting javascript dates returns the difference in milliseconds 
     var diff = new Date() - this._start; 
     s = diff/1000; 
     m = Math.floor(s/60); 
     s -= 60*m; 
     h = Math.floor(m/60); 
     m -= 60*h; 
       todisplay = _.str.sprintf("%02d:%02d:%02d", h, m, s); 
       document.getElementById("extimer").innerHTML = todisplay; 
      }, 

    mystart: function() { 
      alert('pffff ça marche'); 
      this.$element.addClass('oe_web_example_started') 
          .removeClass('oe_web_example_stopped'); 
      //timer=setInterval(this.countUP(counter,minutes,hours,timer,todisplay,h2disp,m2disp,s2disp), 1000); 
      this._start = new Date(); 
        this._watch = setInterval(this.proxy('countUP'),33); 
    }, 



      destroy: function() { 
     if (this._watch) { 
      clearInterval(this._watch); 
     } 
     this._super(); 
    } 
}); 

};

src/css/web_example.css:

.openerp .oe_web_example { 
    color: black; 
    background-color: white; 
    height: 100%; 
} 
.openerp .oe_web_example h4 { 
    margin: 0; 
    font-size: 100%; 
} 
.openerp .oe_web_example.oe_web_example_started .oe_web_example_start button, 
.openerp .oe_web_example.oe_web_example_stopped .oe_web_example_stop button { display: none }, 

src/xml/web_example.xml: usunąć < jak ja nie (szybko) znaleźć sposób, aby wyświetlić kod HTML poprawnie

templates> 
    div t-name="web_example.action" class="oe_web_example"> 
    p> 
     button type="button" id="bstart">start</button> 

     h4 class="oe_web_example_timer" id="extimer">00:00:00</h4> 
    /p> 
    button type="button" id="bstop">Stop</button> 
/div> 
/templates> 

/web_example.xml

<?xml version="1.0" encoding="utf-8"?> 
<openerp> 
<data> 
    <record model="ir.actions.act_window" id="action_web_example_form"> 
     <field name="name">web_example_class</field> 
     <field name="res_model">web_example_class</field> 
    </record> 

    <record model="ir.ui.view" id="action_web_example_form_view"> 
     <field name="name">web_example.form</field> 
     <field name="model">web_example_class</field> 
     <field name="type">form</field> 
     <field name="arch" type="xml"> 
      <form string="Web Example View"> 
       <field name="test2" widget="FieldUpTimer"/> 
      </form> 
     </field> 
    </record> 

<menuitem name="WEB EXAMPLE" action="action_web_example_form" id="web_example_menu"/> 
</data> 
</openerp> 
Powiązane problemy