需求:
一個selection字段前期設(shè)置A,B,C三個選項叫惊,后期業(yè)務(wù)變動需要改成B,C,D谣辞,但是歷史數(shù)據(jù)不能修改兆沙,即還要保留A選項诚些,此時代碼里的字段設(shè)置只能改成A,B,C,D四個值了硝岗,但是又要求下拉選項中不能再出現(xiàn)A
思路:
基于以上需求其實思路也就只有一個那就是在編輯狀態(tài)下隱藏selection字段的中下拉選項A氢哮,簡單查找一下發(fā)現(xiàn)原生中就有隱藏操作,下拉選項本身是可以選擇空值的型檀,但是如果字段設(shè)為必填后空值選項就消失了冗尤,所以只要復(fù)用一下這隱藏方法就能達到我們的目的了
實現(xiàn):
排查后找到最終代碼位置:
/addons/web/static/src/js/fields/relational_fields.js FieldSelection類中的_renderEdit方法
_renderEdit: function () {
this.$el.empty();
var required = this.attrs.modifiersValue && this.attrs.modifiersValue.required;
for (var i = 0 ; i < this.values.length ; i++) {
var disabled = required && this.values[i][0] === false;
this.$el.append($('<option/>', {
value: JSON.stringify(this.values[i][0]),
text: this.values[i][1],
style: disabled ? "display: none" : "",
}));
}
this.$el.val(JSON.stringify(this._getRawValue()));
},
只需要將我們的邏輯加入disabled的判斷中就可以實現(xiàn)屏蔽指定的值
// var disabled = required && this.values[i][0] === false;
// Selection字段增加指定下拉選擇時隱藏指定選項
// 使用方法: 在xml對應(yīng)字段標簽中增加參數(shù) options="{'hide_values':['A']}"
var disabled = (required && this.values[i][0] === false) || (this.nodeOptions.hide_values && this.nodeOptions.hide_values.includes(this.values[i][0]));