如何在Odoo中聚焦瞬态模型形式的字段?



我刚刚意识到default_focus="1"不适用于瞬态模型视图中的字段(至少是用target="new"打开的字段(。autofocus="autofocus",我认为它应该只与buttonspages一起使用,适用于那些瞬态模型字段,但仅适用于第一次打开视图。除非您重新加载浏览器,否则它不会再次工作。

就我而言,我为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);
},

相关内容

  • 没有找到相关文章

最新更新