在odoo中,默认点击tree视图中的一条记录,会打开相应的form视图,如果加了editable="true",
这个行为就阻止了,但是呢,加了editable="true", 但是当所有的字段都是只读的时候,点击记录又会弹出form视图,而且就算不定义form视图,它也会自动生成一个form视图打开。 怎么阻止这一行为呢?
答案其实也很简单, tree标签加一个属性
xml
<tree no_open=1>
实现原理在list_renderer.js中
js
async onCellClicked(record, column, ev) {
if (ev.target.special_click) {
return;
}
debugger
const recordAfterResequence = async () => {
const recordIndex = this.props.list.records.indexOf(record);
await this.resequencePromise;
// row might have changed record after resequence
record = this.props.list.records[recordIndex] || record;
};
if ((this.props.list.model.multiEdit && record.selected) || this.isInlineEditable(record)) {
if (record.isInEdition && this.props.list.editedRecord === record) {
const cell = this.tableRef.el.querySelector(
`.o_selected_row td[name='${column.name}']`
);
if (cell && containsActiveElement(cell)) {
this.lastEditedCell = { column, record };
// Cell is already focused.
return;
}
this.focusCell(column);
this.cellToFocus = null;
} else {
await recordAfterResequence();
await record.switchMode("edit");
this.cellToFocus = { column, record };
}
} else if (this.props.list.editedRecord && this.props.list.editedRecord !== record) {
this.props.list.unselectRecord(true);
} else if (!this.props.archInfo.noOpen) {
this.props.openRecord(record);
}
}
起作用的是最后这句
js
else if (!this.props.archInfo.noOpen) {
this.props.openRecord(record);
}
有机会list_renderer 一定要仔细研究一下的。