我刚刚意识到default_focus="1"
不适用于瞬态模型视图中的字段(至少是用target="new"
打开的字段(。autofocus="autofocus"
,我认为它应该只与buttons
或pages
一起使用,适用于那些瞬态模型字段,但仅适用于第一次打开视图。除非您重新加载浏览器,否则它不会再次工作。
就我而言,我为Char
字段(在瞬态模型内(做了一个小部件,每次打开弹出窗口时都需要聚焦此字段。由于我无法通过XML做到这一点,所以我正在尝试用JavaScript来做到这一点。
这是我的小部件的XML模板,它继承自FieldChar
:
<t t-name="FieldRed" t-extend="FieldChar">
<t t-jquery="input" t-operation="attributes">
<attribute name="id">barcode_input</attribute>
<attribute name="class">o_form_input bg-red</attribute>
</t>
</t>
现在,我的小部件的JS代码。我正在尝试将其集中在start
方法中,因为这是渲染后执行的第一个方法:
start: function() {
console.log('START');
this._super.apply(this, arguments);
this.$el.parent().find('input').focus();
},
但这行不通。我也尝试过:
this.setupFocus(this.$el.parent().find('input'));
但什么也没发生。但是,例如,如果我包含此行,则会自动填充该字段,如预期的那样:
this.$el.parent().find('input').val('START');
所以我的问题是:
如何在每次打开表单时聚焦小部件的input
字段?
我使用一个简单的jquery做到了。
我在字段中添加一个类,并在弹出窗口中编写脚本以供查看。
就像下面一样。
<form string="Stock Disposal">
<sheet>
<script>
$('.my-focus-field').focus()
</script>
<div class="oe_title">
<h1>
Stock Disposal
</h1>
</div>
<group>
<field name="serial_number" class="my-focus-field"/>
</group>
</sheet>
</form>
如果这是错误的方式,请告诉我。
最后,我刚刚找到了一个简单的解决方法。我只是等待 50 毫秒,然后用setTimeout
拨打focus
.我想当调用start
时,Odoo核心会自动将焦点移动到某个地方,如果我等待该操作结束,然后将焦点移动到我想要的任何位置,它就可以工作。虽然不是我喜欢的解决方案,但目前它是我唯一的解决方案:
start: function() {
this._super.apply(this, arguments);
self = this;
setTimeout(function(){
self.$el.parent().find('input').focus();
}, 50);
},