【问题标题】:Node.js datatables editor - Filter select option depending on a certain valueNode.js 数据表编辑器 - 根据某个值过滤选择选项
【发布时间】:2019-01-02 20:02:11
【问题描述】:

我正在使用 node.js 数据表编辑器库。当尝试根据表 'portfolios_isin' 中的特定字段 (user_id) 过滤选择选项时,如下所示:

node.js

let editor = new Editor( db, 'portfolios_isin_mm' )
    .fields(
        new Field( 'portfolios_isin_mm.account_id' ),
        new Field( 'portfolios_isin_mm.user_id' ),
        new Field( 'portfolios_isin_mm.uid_foreign' )
            .options(new Options()
                .table('portfolios_isin')
                .value('id')
                .label('portfolio_name')
                .where(() => {  
                    //this.where('user_id', '=', '1')
                    this.where('portfolios_isin.user_id', '=', '1')
                })
            ),
        new Field( 'securities.issuer_name' )
    )

    .leftJoin( 'portfolios_isin', 'portfolios_isin.id', '=', 'portfolios_isin_mm.uid_foreign' );

我收到此错误:

TypeError: this.where is not a function
    at Builder.Editor.fields.Field.options.Options.table.value.label.where (/home/project/controllers/myproject.js:359:30)
    at Formatter.compileCallback (/home/project/node_modules/knex/lib/formatter.js:161:14)
    at Formatter.rawOrFn (/home/project/node_modules/knex/lib/formatter.js:104:36)
    at QueryCompiler_MySQL.whereWrapped (/home/project/node_modules/knex/lib/query/compiler.js:531:30)
    at QueryCompiler_MySQL.where (/home/project/node_modules/knex/lib/query/compiler.js:314:32)
    at /home/project/node_modules/knex/lib/query/compiler.js:147:30
    at Array.map (<anonymous>)
    at QueryCompiler_MySQL.select (/home/project/node_modules/knex/lib/query/compiler.js:146:33)
    at QueryCompiler_MySQL.toSQL (/home/project/node_modules/knex/lib/query/compiler.js:108:27)
    at Builder.toSQL (/home/project/node_modules/knex/lib/query/builder.js:115:44)
    at /home/project/node_modules/knex/lib/runner.js:56:32
    at tryCatcher (/home/project/node_modules/bluebird/js/release/util.js:16:23)
    at /home/project/node_modules/bluebird/js/release/using.js:185:26
    at tryCatcher (/home/project/node_modules/bluebird/js/release/util.js:16:23)
    at Promise._settlePromiseFromHandler (/home/project/node_modules/bluebird/js/release/promise.js:512:31)
    at Promise._settlePromise (/home/project/node_modules/bluebird/js/release/promise.js:569:18)

根据文档https://editor.datatables.net/manual/nodejs/joins,这是这样做的方法。我有一个类似的项目,我在其中使用 php 数据表编辑器库(一切正常)......在那里我可以过滤如下选项:

php:

Editor::inst( $db, 'portfolios_isin_mm' )
    ->fields(
        Field::inst( 'portfolios_isin_mm.account_id' ),
        Field::inst( 'portfolios_isin_mm.user_id' ),
        Field::inst( 'portfolios_isin_mm.uid_foreign' )
            ->options( 'portfolios_isin', 'id', 'portfolio_name', function ($q) {
                $q->where( 'portfolios_isin.user_id', '1', '=' );
            }),
        Field::inst( 'securities.issuer_name' )         
    )

    ->leftJoin( 'portfolios_isin', 'portfolios_isin.id', '=', 'portfolios_isin_mm.uid_foreign' )    

如何在 node.js 的编辑器中过滤选项值?

【问题讨论】:

  • 你使用的是什么版本的节点?
  • $ node -v ... v10.15.0
  • 你显示的代码是服务器端还是客户端?
  • 编辑器 node.js 库是服务器端的......错误消息也是。

标签: javascript node.js datatables jquery-datatables-editor


【解决方案1】:

this.where 超出了函数 where 存在的范围,因为您使用了将 this 绑定到外部/父范围的箭头函数。

试试这个:

.options(new Options()
                .table('portfolios_isin')
                .value('id')
                .label('portfolio_name')
                .where(function(){  
                    this.where('portfolios_isin.user_id', '=', '1')
                })
            ),

【讨论】:

猜你喜欢
  • 2020-10-09
  • 2017-12-26
  • 2017-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-08
  • 1970-01-01
相关资源
最近更新 更多