Odoo 10 - 将上下文传递给FormView.buttons模板内的按钮调用的向导

时间:2016-12-23 18:05:07

标签: javascript openerp

我在FormView中的创建一个旁边添加了一个新按钮。

<t t-extend="FormView.buttons">
    <t t-jquery="button.o_form_button_create" t-operation="after">
        <t t-if="widget.fields_view.name == 'site.form'">
            <button type="button"
                    class="btn btn-primary btn-sm oe_create_customer_button_form">
                Create Customer Site
            </button>
        </t>
    </t>
</t>

我将操作链接到它以打开向导表单。

现在我会在向导调用时传递表单中显示的记录中的值,但是我遇到了一些麻烦。 它仅保存打开的第一个记录的引用,因此当我从另一个记录调用该向导时,它将显示来自第一个记录的数据。

instance.web.FormView.include({
    render_buttons: function() {
        var self = this
        this._super.apply(this, arguments)

        // GET BUTTON REFERENCE
        if (this.$buttons) {
            var btn = this.$buttons.find('.oe_create_customer_button_form')
        }
        self.do_query(btn)
    },
    do_query: function(btn) {
        var self = this
        var context = {}

        // QUERY THE MODEL   --   DOES NOT WORK PROPERLY
        // TO PASS PARENT
        new instance.web.Model('broadband.site')
            .query()
            .filter([['id', '=', self.dataset.ids[0]]])
            .first()
            .done(function(res) {
                if(res) {
                    context = {
                        'default_parent_id': res.id
                    }
                }
                self.do_new_button(context, btn)
            })
    },
    do_new_button: function (context, btn) {
        var self = this

        var action = ({
            type: 'ir.actions.act_window',
            res_model: 'broadband.wizard',
            view_type: 'form',
            view_mode: 'form',
            views: [[false, 'form']],
            target: 'new',
            context: context
        })

        btn.on('click', function() {
            self.do_action(action)
        })
    }
})

1 个答案:

答案 0 :(得分:1)

[解决]

我覆盖了&#39; load_record&#39; 功能,以获取&#39; datarecord&#39; 对象并使用它代替&#39 ;数据集&#39;

以下是代码:

instance.web.FormView.include({
    is_site: function() {
        if (this.dataset.model && this.dataset.model == 'broadband.site') {
            return true
        } else {
            return false
        }
    },
    render_buttons: function() {
        if(this.is_site() && !this.$buttons) {
            this._super.apply(this, arguments)
        }
    },
    load_record: function() {
        var self = this

        if(this.is_site()) {
            self._super.apply(this, arguments)
            var btn = self.$buttons.find('.oe_create_customer_button_form')
            btn.hide()
            if(self.datarecord.site_type != 'last_mile') {
                btn.show()
            }
            self.do_query(btn)
        } else {
            self._super.apply(this, arguments)
        }
    },
    do_query: function(btn) {
        var self = this
        var context = {}
        var passed = false

        if(this.is_site()) {

            var site_id = self.datarecord.id

            btn.on('click', function() {
                new instance.web.Model('broadband.site')
                    .query()
                    .filter([['id', '=', site_id]])
                    .first()
                    .then(function(res) {
                        if(res && !passed) {
                            context = {
                                'default_parent_id': res.id
                            }
                            self.do_button_action(context)
                            passed = true
                        }
                    })
            })
        }
    },
    do_button_action: function (context) {
        var self = this

        var action = ({
            type: 'ir.actions.act_window',
            res_model: 'broadband.wizard',
            view_type: 'form',
            view_mode: 'form',
            views: [[false, 'form']],
            target: 'new',
            context: context
        })

        self.do_action(action)

    }
})