)
,在我的用例中,我想尽可能保留先前选择的操作员。
有一种方法可以覆盖这种行为并防止操作员不必要地重置?任何建议或解决方法都将不胜感激!您可以通过添加一些JavaScript来解决此问题,这些JavaScript会在更改QueryBuilder中更改过滤器时聆听。这是这样做的方法:
$('#builder').on('afterUpdateRuleFilter.queryBuilder', function(e, rule, previousFilter) {
// Only try to preserve the operator if there was a previous filter
if (previousFilter && rule.filter) {
var previousOperator = rule.operator;
// Get the list of valid operators for the new filter
var newOperators = rule.queryBuilder.getOperators(rule.filter);
// Check if the old operator is still good with the new filter
var operatorFound = newOperators.find(function(op) {
return op.type === previousOperator.type;
});
if (operatorFound) {
// If it's good, keep using the old operator
rule.$el.find(QueryBuilder.selectors.rule_operator).val(previousOperator.type);
rule.operator = previousOperator;
}
}
});
此代码是在每次更改过滤器时检查是否可以继续使用相同的操作员(例如等于,而不是等于等)。如果操作员仍然可以与新过滤器一起使用,则不会更改它。
这种方式,每次更改过滤器时,操作员不会重置,从而使事情变得不那么烦人,更一致。