Gridx入门

数字IC物理验证实战 | 从Calibre LVS报告到Innovus定位的Debug全链路解析 本文详细解析了数字IC物理验证中Calibre LVS报告的Debug全流程,从INCORRECT NETS错误的初探到Innovus定位技巧,提供了实战案例和高效工具的使用方法。重点介绍了Calibre高亮功能、Innovus验证命令以及前后端工具联动的关键策略,帮助工程师快速定位和解决LVS问题,提升物理验证效率。 阅读详情

原创英文版链接:https://github.com/evanhw/gridx/wiki/Introduction-to-Gridx

虽然同样都是基于Dojo store, 但与DataGrid/EnhancedGrid相比,Gridx有一套完全不同的架构。它有以下特点:

  1. Gridx采用了一套与UI无关的内核来处理所有的表格数据的逻辑操作。
  2. Gridx采用了一套灵活的模块化系统,它与基于plugin的EnhancedGrid架构不同,这种模块化架构不仅能提配置各种表格特性的灵活性,并且当一些功能不使用时,能够减少运行代码的大小。
  3. Gridx开发了一套简洁直接的API,使得各模块之间实现真正的松耦合。

本文将简要介绍如何使用Gridx进行开发。现在Gridx仍处于开发阶段,一些API和实现的细节仍有可能调整。但它的基本用法和架构已经稳定。感兴趣的童鞋不妨一试。

1. 创建

假设我们有如下HTML页面:

<html>
<head>
    <title>Gridx Demo</title>
    <script type="text/javascript" src="dojo/dojo.js" data-dojo-config="async: true"></script>
</head>
<body>
    <!-- We'd like to show a grid here -->
    <div id="gridNode" style="width: 400px; height: 300px;"></div>
</body>
</html>

首先,要引入Gridx的CSS:

<link rel="stylesheet" href="gridx/resources/claro/Gridx.css" />

目前Gridx只支持Claro主题,如果要在RTL模式下运行,请用如下代码来引入:

<link rel="stylesheet" href="gridx/resources/claro/Gridx_rtl.css" />

我们必须“请求require” 的JavaScript 模块是:

  1. 一种Store类型,例如:dojo/store/Memory
  2. gridx/Grid
  3. gridx/core/model/cache/Sync (用于客户端store) or gridx/core/model/cache/Async (用于服务器端 store)

假设我们要创建基于dojo/store/Memory的grid,那么我们需要如下代码:

require([
    'dojo/store/Memory',
    'gridx/Grid',
    'gridx/core/model/cache/Sync'
], function(Store, Grid, Cache){
    var store = new Store({
        data: [
            {id: 1, title: 'Hey There', artist: 'Bette Midler'},
            {id: 2, title: 'Love or Confusion', artist: 'Jimi Hendrix'},
            {id: 3, title: 'Sugar Street', artist: 'Andy Narell'}
        ]
    });
    ......
});

与DataGrid/EnhancedGrid类似,我们需要定义列结构:

var columns = [
    {field: 'id', name: 'Identity'},
    {field: 'title', name: 'Title'},
    {field: 'artist', name: 'Artist'}
];

OK,万事俱备,现在我们可以创建一个简单的grid了:

var grid = new Grid({
    cacheClass: Cache,
    store: store,
    structure: columns
}, 'gridNode'); //Assume we have a node with id 'gridNode'
grid.startup();

Gridx继承于dijit._WidgetBase, 因此它支持所有widget的基本特性。

以上创建的grid是一个最基本但可用的grid。我们可以灵活的给它加上很多模块,并且这些模块独立工作,它们之间不会相互冲突。下面一节我们将介绍如何实现这一点。

2. 基本API和API对象

Gridx引入了如下API对象:rows,columns,和cells,可以通过这些对象来操作API。

例如我们可以用如下代码来获得第2行的id:

var id = grid.row(1).id;
获得位于第1行第2列格子的数据:

var data = grid.cell(0, 1).data();
获得第3列的name属性:

var title = grid.column(2).name();

以上方法中的grid.row(), grid.cell() 和 grid.column()就是我们所说的API对象。它们只是一套API的容器,本身是没有状态的。因此,我们如果想获得一个cell对象,可用如下代码:

var cell = grid.cell(0, 0);
var data1 = cell.data();
然后我们改变此cell中的data,再调用:

var data2 = cell.data();
则data2中就得到更新过的cell data,而不是data1的值。

如果想要获得列名组成的数组,我们可以使用一个更好的API:

var names = grid.columns().map(function(col){
    return col.name();
});
columns()和rows()方法返回的是API对象数组。这两个方法同样接受指定范围的参数。例如,如果你只想获得前3列的列名,就可以写成:

grid.columns(0, 3);
如果需要从第2列开始的两列列名,则可以写成:
grid.columns(1, 2);
获得从第3列开始的后面所有列名:

grid.columns(2);
返回的数组可以用各种非常有用的数组函数才操作,例如map,filter,forEach,some 以及 every。

我们可以使用API对象来调用模块提供的更多方法。例如,如果加载了sort模块,我们可以这样写:

grid.column(0).sort();
下面一些其它常用的API方法:

 grid.setColumns(columnStructure);       //Reset the column structure
    grid.setStore(store);       //Reset store
    grid.columnCount(); //Faster than grid.columns().length;
    grid.rowCount();    //Faster than grid.rows().length;
    grid.resize();  //This is what layout widgets (containers) need.
模块提供了模块API,它们在底层整合,因此不必担心模块之间会相互影响造成冲突。下一节我们将具体介绍更多关于模块API的内容。

3. 模块

几乎所有的Gridx UI特性都是以模块的方式实现,包括表头,表格体(所有行), 滚动条(横向和纵向滚动条)等。不过这些是核心模块,缺省状态下是自动加载的。非核心模块与EnhancedGrid的插件“plugin”类似,可以根据需要选择要加载的模块。

理论上说,一个Gridx模块可以只是一个dojo类,并可以放在任何地方。但通常情况下,Gridx模块继承自gridx/core/_Module 并且放在gridx/modules目录下。如果要在一个grid实例中添加一个模块,首先我们需要“请求”该模块的源代码,然后在创建grid的时候声明之。

require([
    'dojo/store/Memory',
    'gridx/Grid',
    'gridx/core/model/cache/Sync',
    'gridx/modules/SingleSort', //Require module source code
    'gridx/modules/ColumnResizer'   //Require module source code
], function(Store, Grid, Cache, Sort, ColumnResizer){
    ......
    var grid = new Grid({
        cacheClass: Cache,
        store: store,
        structure: columns,
        modules: [
            Sort,       //Declare modules in a grid instance
            ColumnResizer   //Declare modules in a grid instance
        ]
    });
});
为一个grid实例声明模块只需要将所有模块类放在一个数组中。这种声明方法比之EnhancedGrid的plugin更加简单明了。因为相对于隐式使用的类,例如string类,被“请求”的模块类(Sort和ColumnResizer) 是显式地使用的。但是当我们想要传递一些初始参数,则需写成:

 modules: [
        {
            moduleClass: ColumnResizer,
            detectWidth: 10
        },
        ......
    ]
如果你感觉这种写法不够酷,那么还有另外一种写法,将其声明成grid的参数

 var grid = new Grid({
        ......
        modules: [
            ColumnResizer
        ],
        columnResizerDetectWidth: 10
    });
如果一个模块参数声明成grid的参数,它必须以模块名开头,这样不同模块的参数才不会相互冲突。

Gridx模块被设计成可替换的。这意味着如果你不喜欢某一个模块,你完全可以实现你自己的模块,同时不需要太担心它是否会对grid的其他部分或者该模块之前的实现产生不可预料的影响。你只需要遵循该模块所有的API,这样你的实现就能很好的与其他模块无缝合作。这里的“API集合”是用模块名来标识的。是的,跟声明grid参数一样将模块名作为前缀。例如,模块 gridx/modules/select/Row/ 名为“selectRow”, 这意味着它实现了所有“selectRow”的API。现有另一模块 gridx/modules/extendedSelect/Row, 它也名为“selectRow”, 这意味着该模块实现了同样的API集合。因此当另外一个模块依赖于行选择的特性,它只需要依赖于这个API集合,而不是某一个特定的实现。


有时候,模块也可能依赖于其他模块。例如,UI模块“paginationBar” 依赖于一个非UI模块“pagination”。 因此当声明PaginationBar模块时,我们也需要请求Paginatioin模块。但我们不需要在创建grid时声明Pagination模块,只是“请求”这个关联模块的源代码即可。如果没有请求这个关联模块,我们就会在控制台中得到如下出错信息,并且该grid很可能不会正确的显示。

Error: Forced/Required Dependent Module 'pagination' is NOT Found for 'paginationBar'

这看起来似乎有点不方便。因为在EnhancedGrid中,所有关联的插件都是自动加载的。但为了提高灵活性,这种做法是不可避免的。因为在EnhancedGrid中,如果一个插件已经自动被其他插件请求了,我们就无法轻松的替换这个插件的实现。另一个好处是,这种做法可以减少一些不可见的源代码加载,从而提高效率。

几乎所有的模块都可以通过grid对象来直接访问。例如:

grid.select.row.selectById(rowId);
    grid.select.column.selectById(colId);
    grid.sort.sort(colId);
    grid.columnResizer.setWidth(colId, 100);
在这种方式下,每个模块都有自己的命名空间,因此他们不会相互冲突。

一个模块可以选择暴露哪些API给grid,已经暴露哪些API给API对象(row/column/cell)。请注意模块名只是暴露给grid的API的标识,这样就可以减少依赖性,并且提高代码的可维护性。

以下是目前支持的非核心模块列表。更多精彩细节我们会在将来的博文中介绍。

1. CellWidget
2. ColumnLock
3. ColumnResizer
4. Dod
5. Edit
6. Focus
7. IndirectSelect
8. Menu
9. NestedSort
10. Persist
11. Printer
12. RowHeader
13. RowLock
14. SingleSort
15. SummaryBar
16. TitleBar
17. Toolbar
18. Tree
19. VirtualVScroller
20. Filter
21. FilterBar
22. Pagination
23. PaginationBar
24. move.Row
25. move.Column
25. dnd.Row
26. dnd.Column
26. select.Row
27. select.Column
28. select.Cell
29. extendedSelect.Row
30. extendedSelect.Column
31. extendedSelect.Cell
32. exporter.CSV
33. exporter.Table

《QT+PCL 第一章》:点云读取显示 点云读取显示一、核心代码二、QT设置三、效果展示 一、核心代码 二、QT设置 三、效果展示 阅读详情

相关推荐

2. Netty使用JSerialComm进行串口读取(二)

现在开始处理这些问题 第一个问题:串口读取超时异常一路传播到最后也没有处理。 ​ 第二个问题:即使处理了该异常,程序仍然退出,这不能满足一些实际使用要求需求。该问题与设置很长的读取超时时间没关系,无论多长到时间后总会退出。

s3c2410的博客 2462

推荐开源项目:GridX —— 高性能、插件化的数据网格组件

推荐开源项目:GridX —— 高性能、插件化的数据网格组件 项目介绍 GridX是一款基于Dojo Toolkit的高性能、模块化和具有插件架构的数据网格组件。它专为处理大规模数据集而优化,同时提供了丰富的功能特性。无论是对于简单的数据显示还是复杂的业务逻辑处理,GridX都能轻松应对。 项目技术分析 GridX的核心设计紧凑且轻量级,其精髓在于它的灵活插件机制。这一机制包括全面的模块生命周期管...

gitblog_00012的博客 690

Vivado静态时序分析学习笔记(1)

静态时序分析分为片内时序分析(寄存器与寄存器之间的时序关系)和片外时序分析(IO时序分析)。(1)建立时间 setup time在时钟事件(上升沿/下降沿)发生之前数据信号应保持稳定的时间。把实际电路抽象成前级D触发器+组合逻辑+后级D触发器。

Fantaasky的博客 4376

fbfxgn

xfgn gv m

a18707125700a的专栏 386

大模型训练方法全面解析:SFT、RFT、TRPO、DPO、PPO、GRPO、RLH、RLHF技术深度剖析

大模型训练方法全面解析 本文系统介绍了当前主流的大模型训练和对齐技术,包括监督微调(SFT)、拒绝采样微调(RFT)、信任域策略优化(TRPO)、直接偏好优化(DPO)、近端策略优化(PPO)等。这些方法各有特点:SFT简单高效但数据依赖性强;RFT通过质量筛选提升输出质量;TRPO训练稳定但计算复杂;PPO是RLHF核心算法,平衡探索与利用。文章详细分析了各方法的实现原理、优势劣势及适用场景,为开发者选择合适的大模型训练策略提供参考。

2796

ESP32驱动TFT屏幕实战:LVGL与TFT_eSPI完美结合

本文详细介绍了如何在ESP32上结合TFT_eSPI驱动库与LVGL图形库,实现高效、流畅的嵌入式GUI开发。内容涵盖硬件连接、软件环境搭建、库配置、LVGL移植、界面创建及性能优化等全流程实战指南,帮助开发者快速构建低成本、高性能的交互式显示应用。

weixin_29206669的博客 200

如何使用 Gridx

简介: Gridx 的是为了弥补 Dojo 现有的 Grid 控件(主要是 DataGrid 及其子类 EnhancedGrid)的各种不足而诞生的。Gridx 脱离了 DataGrid 的框架,具有高度模块化的设计,使其能适应各种使用场景的需要。大量针对 DataGrid/EnhancedGrid 的问题而做出的设计上的改进使 Gridx 具有更高的稳定性和更好的性能。同时,API 的设计更直观

Dojo中文博客 1万+

MS1030超声波流量计电路实战:如何用15ps精度优化水表设计(附配置代码)

本文深入探讨了如何利用MS1030超声波流量计芯片实现15ps高精度测量,以优化水表设计。文章从系统误差分配出发,详细解析了硬件电路设计要点、SPI通信配置及核心优化技巧,如利用可编程偏置电压和8回波累加功能来提升抗干扰能力与测量稳定性,并附有实用的配置代码示例。

svm4gardener的博客 334

02XY Grid栅格系统

目录屏幕尺寸(size)栅格系统基本样式(Basics)间隔(Gutters)布局容器类`.grid-container`类`.fluid`类`.full` 屏幕尺寸(size) 小屏幕small:< 640px 中屏幕medium:>= 640px && <= 1024px 大屏幕large:> 1024px 栅格系统 基本样式(Basics) 类.gr...

爱喝水的qdy的博客 607

【生信分析】clusterProfiler: universal enrichment tool for functional and comparative study(1)

clusterProfiler: universal enrichment tool for functional and comparative studyClusterProfiler: 用于功能和比较研究的通用富集工具总览1. 引言1.1 术语1.1.1 基因集和通路1.1.2 基因同源(GO)1.1.3 京都基因与基因组百科全书(KEGG)1.1.4 其他基因集2. 功能富集分析方法2.1 过度表征分析(Over Representation Analysis)2.2 基因集富集分析(Gene Se

小哲的博客 1365

理想L9高通QAM8797座舱域控制器全拆解|全网独家复现 硬件架构升级、电源散热优化、多屏低延迟交互、车机系统赋能高端智能座舱落地

随着智能汽车向舱驾一体、全域智能化、多模交互方向迭代,传统单一功能座舱芯片已无法满足多屏高刷渲染、全车AI语音、车内视觉感知、高速车载通信的叠加算力需求。2026款全新理想L9作为旗舰级智能SUV,全面搭载高通新一代旗舰座舱域控制器QAM8797,搭配自研马赫M100 AI芯片、国产车规主控芯片,构建起高性能、高可靠、低延迟的车载中央计算平台。

getusushu的博客 380

冷门:Dojo Gridx中,如何编写一个module

DOJO 是一个开源的 Javascript 开发框架,最近版本是1.9,类似的还有大名鼎鼎的Jquery, YUI 等等。 因为工作的原因最近接触了这个框架,奇怪的是好像在业界DOJO并不流行,网上资料也较少,只有IBM在大力的推动,看来效果也是差强人意,感觉是个冷门的玩意。经过几天的接触觉得这个DOJO还不错,有很多值得推荐的地方。 1. 模块化:Dojo的库都做成了一个一个的模块,类似ja

pushme_pli的专栏 2951

VB.net:VB.net编程语言学习之基于VS软件利用VB.net语言实现对SolidWorks进行二次开发的案例应用(启动SolidWorks代码/直接驱动模型代码/路径下模型驱动代码/创建两个文

VB.net:VB.net编程语言学习之基于VS软件利用VB.net语言实现对SolidWorks进行二次开发的案例应用(启动SolidWorks代码/直接驱动模型代码/路径下模型驱动代码/创建两个文件夹对话框代码/重新生成三维图代码/导出工程图代码)之详细攻略 目录 基于VS软件利用VB.net语言实现对SolidWorks进行二次开发的案例应用 1、调用SW的模型,并进行参数修改 1.1、VB按钮之SW的三维零件之间切换思想 1.2、调用SW 2、基础案例经验 2.1、设计SW的拉

头部AI社区如有邀博主AI主题演讲请私信—心比天高,仗剑走天涯,保持热爱,奔赴向梦想!低调,专注,谦虚,自律,反思,成长,还算比较正能量的博主,公益免费传播…内心特别想在AI界做出一些可以推进历史进程影响力的技术(兴趣使然,有点小情怀,也有点使命感呀 3037

gridx的使用

简介: Gridx 的是为了弥补 Dojo 现有的 Grid 控件(主要是 DataGrid 及其子类 EnhancedGrid)的各种不足而诞生的。Gridx 脱离了 DataGrid 的框架,具有高度模块化的设计,使其能适应各种使用场景的需要。大量针对 DataGrid/EnhancedGrid 的问题而做出的设计上的改进使 Gridx 具有更高的稳定性和更好的性能。同时,API 的设计更

qq_15167261的博客 2364

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

如何在gridx的cell中显示控件?

如何在gridx的cell中显示控件?在gridx的列定义中,一个decorator方法可以被用来在cell中显示任何HTML/CSS. 但是有时候这稍显不够。当cell中需要放入复杂的控件时,从decorator方法中返回的纯string不再有效。所以gridx/modules/CellWidget模块在这是显示了作用。为何是CellWidgetCellWidget模块通过grid的body模块

Dojo中文博客 9366

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Gridx Reload 重置

有时需要两个Gridx联动,需要Gridx重置。 var  target, pStore;  target = "/Api/EmployeesPost/Get?userid=admin&userdept=MM0001";  pStore = new Store(new JsonRestStore({ idProperty: "ID", target: target }), new Memor

Pipi0714的专栏 1469

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

DOJO之gridx

GridX简介 Gridx是IBM公司的职员对Dojo中的Grid进行进一步扩展的组件,但是它是重新开发了Grid而不是继承Grid。 虽然同样都是基于Dojo store, 但与DataGrid/EnhancedGrid相比,Gridx有一套完全不同的架构。它有以下特点: Gridx采用了一套与UI无关的内核来处理所有的表格数据的逻辑操作。 Gridx采用了一套灵活的模块化系...

weixin_30466039的博客 259

DOJO - Usage of GridX

DOJO - Usage of GridX

My Backup 617

java中的gridy_Java GridBagConstraints gridx和gridy无法正常工作?

我正在尝试使用gridx和gridy约束来定位我的按钮。但是它们不起作用!如果更改gridx和gridy变量,则什么也不会发生。如果我将填充更改GridBagConstraints为NONE,它仍然不起作用。我在这里想念什么吗?import java.awt.*;import javax.swing.*;public class Window extends JFrame{private stat...

weixin_30579759的博客 412

Gridx 显示控件故障一例

Gridx显示控件代码 HTML     Widget in Grid Cell Test                   .gridx {             width: 1000px;             height: 420px;         }                          Script脚本

Pipi0714的专栏 1001

dojo gridx修改表头

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34314962的博客 141

2023 GridX个人主页网站源码

2023 GridX个人主页网站源码2023 GridX个人主页网站源码2023 GridX个人主页网站源码2023 GridX个人主页网站源码2023 GridX个人主页网站源码2023 GridX个人主页网站源码2023 GridX个人主页网站源码2023 GridX个人主页网站源码。除了其独特和现代的外观,所有页面元素功能齐全。响应式的布局不仅反应灵敏,它还针对所有显示设备进行了全面优化。您可以用于设计师、开发人员、程序员、自由职业者、艺术家、摄影师,并且可以用于个人作品集等。

206

java中的gridy_java,_GridBagLayout 布局 的行列概念以及gridx,gridy失效?,java - phpStudy...

GridBagLayout 布局 的行列概念以及gridx,gridy失效?大家好,本人java初学者。在做一个GUI界面的时候使用了GridBagLayout布局,代码如下。我的理解是gridx 和gridy是将组件设置在 某一行某一列 上,所以我用不同的数值尝试性修改两个button的位置,但是不管怎么设置其位置都没有变化。那么GridBagLayout中一行一列到底有几个单元格?gridxg...

weixin_34177635的博客 416
上一篇: Dojo树使用心得
下一篇: 深入了解 Dojo 的服务器推送技术
dojotoolkit
博客等级 码龄16年 1205粉丝 61原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值