0

バーコードスキャナーを使用して在庫転送を行うためのバーコードスキャンモジュールを開発しようとしています。QWeb テンプレートを作成し、this.$el.htmlメソッドでレンダリングすると、そのビューが適切にレンダリングされていることがわかります。問題は、テンプレートに渡す値がクライアントのアクションで更新されないことです。js スクリプトで変更するときに動的に変更するにはどうすればよいですか? コードは次のとおりです。

バーコードスキャナー.js

odoo.define('stock.barcode_scanner', function(require) {
    'use sctrict';

    var AbstractAction = require('web.AbstractAction');
    var core = require('web.core');
    var QWeb = core.qweb;
    var _t = core._t;

    var BarcodeAction = AbstractAction.extend({

        start: function() {
            var self = this;
            self.$el.html(QWeb.render("BarcodeHandlerView", {widget: self}));
            core.bus.on('barcode_scanned', this, this._onBarcodeScanned);

            return this._super();
        },

        destroy: function () {
            core.bus.off('barcode_scanned', this, this._onBarcodeScanned);
            this._super();
        },

        _onBarcodeScanned: function(barcode) {
            var self = this;
            this._rpc({
                    model: 'stock.barcode.handler',
                    method: 'product_scan',
                    args: [barcode, ],
                })
                .then(function (result) {
                    if (result.action) {
                        var action = result.action;
                        if (action.type === 'source_location_set') {
                            self.sourceLocation = action.value;
                        } else if (action.type === 'product_added') {
                            if (self.productsList === undefined) {
                                self.productsList = [];
                            }
                            self.productsList.push(action.value);
                        } else if (action.type === 'destination_location_set') {
                            self.destionationLocation = action.value;
                        } else if (action.type === 'validation') {
                            self.sourceLocation = undefined;
                            self.productsList = undefined;
                            self.destinationLocation = undefined;
                        }
                    }
                    if (result.warning) {
                        self.do_warn(result.warning);
                    }
                });
        },
    });

    core.action_registry.add('stock_barcode_scanner', BarcodeAction);

    return {
        BarcodeAction: BarcodeAction,
    };
});

transfer.xml

<?xml version="1.0" encoding="utf-8"?>
<template id="theme.tp_remove_button"> 
    <t t-name="BarcodeHandlerView">
        <div>Source Location: <t t-esc="widget.sourceLocation"/></div>
        <div>Destination Location: <t t-esc="widget.destinationLocation"/></div>
    </t>
</template>

すべてが適切に設定されていると確信しています__manifest__.py-ビューは表示されますが、クライアントアクションはページの更新をトリガーしません-クライアントアクションはトリガー時に実行されます-Python関数から返される警告を確認できます. 私は何を間違っていますか?それを達成するために他のアプローチを使用する必要がありますか?

4

1 に答える 1