Closed jpanda-cn closed 2 years ago
@jpanda-cn
SELECT * FROM blocks ...
的确可以优化, 我尝试按照文中所提到的方案, 将 IAL
解析后传给 config.query.handler
内的函数句柄中__pre__
的方案在 SQL 语句中渲染样式@all-contributors please add @jpanda-cn for ideas
@Zuoqiu-Yingyi
I've put up a pull request to add @jpanda-cn! :tada:
@jpanda-cn Release Query v0.2.0 release · Zuoqiu-Yingyi/widget-query
SELECT * FROM blocks ...
, 将 IAL 解析后传给 config.query.handler 内的函数句柄中
我的想法
大致看了下代码,markdown元素的渲染操作主要委托给了config的handler方法处理,在这里handler方法根据对应的字段名称去渲染数据.
如果我们允许用户提供config#handler的扩展,那么就可以实现更巧妙的定制化处理操作,比如,中文标题,自定义标签等操作.
以自定义标签为例,我们可以解析blocks表中ial列的tags部分,对其以
,
区分,获取文档块的标签,甚至可以提供一个配置项针对不同的tag做不同的颜色渲染.怎么去实现
为了实现上述的能力,我们需要:
其中第一点,目前通过
custom-query-fields
属性已经实现,接下来是第二步,允许用户针对指定的header提供自定义处理方法.参考做
custom-query-fields
的思路,我们可以同样借助于思源的ial属性存放自定义的处理方法定义,比如:custom-handler
.为了更方便的去使用自定义handler,可以考虑提供一个上下文对象Context,这个Context包含了常用方法的引用的同时包含一些新的内置函数,比如:
这样的话下面的handler方法就需要有针对性的进行一些调整:
以context对应的处理方法为例,其定义可能会变成:
关于自定义函数的解析,我们可以交由eval方法去处理,当然在我们点击query按钮表达式解析报错时,可以将报错数据通过一些方式显式的展示出来,比如:
alert
.当我们做到了这些,本质上我们拥有了一个十分强大的表格,甚至在一定程度上要比notion的database还要强大,因为借助于javascript语言,我们可以实现更丰富的操作.比如:
一些其他的想法
当前这种设计的使用成本很高,对于有一定编程经验的人来说,会比较容易上手,但是对于非程序员来说,使用时可能会是一个困扰.
针对这种情况,可以考虑有一个可视化界面,在Query按钮旁,放置一个设置按钮,点击时,全屏展示,这样可以跳过iframe本身大小的限制.
之后,可以提供一个简单的可视化界面,做多级操作: