在 Jquery Querybuilder afterAddRule 事件中选择创建的规则的后代

Posted

技术标签:

【中文标题】在 Jquery Querybuilder afterAddRule 事件中选择创建的规则的后代【英文标题】:Selecting a descendant of the created Rule in the Jquery Querybuilder afterAddRule event 【发布时间】:2021-06-17 08:53:21 【问题描述】:

html 是来自新规则的 sn-p,当您在 Jquery Querybuilder 中单击“添加规则”时,该规则会创建。

  <div class="rule-header">
    <div class="btn-group pull-right rule-actions">
      <button type="button" class="btn btn-xs btn-danger" data-delete="rule">
        <i class="glyphicon glyphicon-remove"></i> Delete
      </button>
    </div>
  </div>
  <div class="error-container" data-toggle="tooltip">
    <i class="glyphicon glyphicon-warning-sign"></i>
  </div>
  <div class="rule-filter-container">
    <select class="form-control" name="ruleBuilder_rule_4_filter">
      <option value="-1">------</option>
      <option value="AccountType">AccountType: Account Type</option>
      <option value="ar_ledger">ar_ledger: AR Ledger</option>
         </select>
  </div>
  <div class="rule-operator-container"></div>
  <div class="rule-value-container"></div>
</div>

我正在按如下方式处理 Querybuilder 的 addAfterRule 事件,并尝试在框后初始化模糊搜索下拉菜单。但是,我似乎无法引用该框。 $(rule).find() 不起作用,我尝试了各种不同的选择器。如何获得对框的引用以便操作它?

 $('#ruleBuilder').queryBuilder(
                plugins: ['bt-tooltip-errors'],
                filters: filters,
                rules: jsonRules,
                operators:
                    [
                        'equal',
                        'not_equal',
                        'in',
                        'not_in',
                        'less',
                        'less_or_equal',
                        'greater',
                        'greater_or_equal',
                        'between',
                        'not_between',
                        'begins_with',
                        'not_begins_with',
                        'contains',
                        'not_contains',
                        'ends_with',
                        'not_ends_with',
                        //'is_not_empty',
                        'is_null',
                        'is_not_null',
                         type: 'is_empty', nb_inputs: 0, multiple: false, apply_to: ['string'] ,
                         type: 'is_not_empty', nb_inputs: 0, multiple: false, apply_to: ['string'] 

                    ],
                lang: 
                    operators: 
                        is_empty: 'is empty',
                        is_not_empty: 'is not empty',
                        equal_boolean: 'equal'
                    
                ,
                sqlOperators: 
                    is_empty:  op: 'IS NULL' ,
                    is_not_empty:  op: 'IS NOT NULL' ,
                    equal_boolean:  op: 'equal' 
                
            ).on('afterAddRule.queryBuilder', function (e, rule) 
                $(rule).find('.form-control').each(
                    function (index) 
                        $(this).after('<div id="fuzzSearch' + numFilters + 1 + '"><div id ="fuzzNameContainer"><span class="fuzzName"></span><span class="fuzzArrow"></span></div><div id="fuzzDropdownContainer"><input type="text" value="" class="fuzzMagicBox" placeholder="search.." /><span class="fuzzSearchIcon"></span><ul id="fuzzResults"></ul></div>');
                    );

                $(rule).find('.form-control').each(
                    function (index) 
                        $(this).fuzzyDropdown( mainContainer: '#fuzzSearch' + numFilters + 1 );
                    );
                );

【问题讨论】:

【参考方案1】:
 $('#build-query-defintion').queryBuilder(
            plugins: ['sortable', 'bt-tooltip-errors',
                'bt-checkbox',
                'invert',
                'not-group',
                'filter-description'],
            allow_empty: true,
            filters: result,
            rules: customFilters,
            icons: 
                add_group: 'fa fa-plus-square',
                add_rule: 'fa fa-plus-circle',
                remove_group: 'fa fa-minus-square',
                remove_rule: 'fa fa-minus-circle',
                error: 'fa fa-exclamation-triangle',
                sortable: 'fa fa-exclamation-triangle'
            
        ).on('afterCreateRuleFilters.queryBuilder', function (e, rule) 
            rule.$el.find(QueryBuilder.selectors.rule_filter).selectpicker(
                liveSearch: true,
                //style:'width: 500px;',
            );
        );

请包含 jquery 查询生成器 js、css 引导 js,cs 引导选择器 js,css 希望这个灵魂对你有用。

【讨论】:

以上是关于在 Jquery Querybuilder afterAddRule 事件中选择创建的规则的后代的主要内容,如果未能解决你的问题,请参考以下文章

创建knex queryBuilder并稍后执行

Doctrine preLoad Listener 在执行前操纵 QueryBuilder

学说:ORM QueryBuilder 或 DBAL QueryBuilder

在 Doctrine QueryBuilder 中计算行数

在 Doctrine QueryBuilder 中计算行数

ORMLite QueryBuilder.orderByRaw(String, SelectArg) 忽略 QueryBuilder.queryRaw() 上的 SelectArg