5

私はopenerpの Web 開発に不慣れです。助けていただければ幸いです。たとえば、textbox開始ボタンと停止ボタンを備えたカウントアップタイマーウィジェットを作成したい(新しいカスタムフィールドに含めるか、個別に)。

javascript時間をカウントする小さな関数を作成しました。

basic を拡張して新しいウィジェットを作成する必要がありますFieldCharか? 新しいタイプのフィールドを作成しますか?

カウンター コードをどこに配置し、それをcharフィールド (または新しいタイプのフィールド)に表示する方法を教えてください。

次のようなもので拡張する方法に関するドキュメントを見つけました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);
    }
  });
}

openerp'sインターフェイスがどのように機能するかについてのドキュメントであっても、これらすべてをまとめるためのガイダンスが必要です。

前もって感謝します

これが私がいる場所です: Module : 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> 

私のクイックカウントアップタイマーテスト:

<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>
4

1 に答える 1

2

タイマーを試しにopenerpアクションとして実行できた、タイマーがカウントアップする、表示が更新されるなど...

これをフォームで使用できる openerp フィールドにしたい:

私はそれに近づいていますが、ボタンはもう機能していません。

これが私のコードです:

モジュール名は 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();
    }
 });

};

ソース/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: HTML コードを正しく表示する方法が (すぐに) 見つからなかったので < を削除します

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> 
于 2013-01-28T20:19:03.817 に答える