我在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)
})
}
})
答案 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)
}
})