Gridx入门(3)
理论上说,一个Gridx模块可以只是一个dojo类,并可以放在任何地方。但通常情况下,Gridx模块继承自gridx/core/_Module 并且放在gridx/modules目录下。如果要在一个grid实例中添加一个模块,首先我们需要“请求”该模块的源代码,然后在创建grid的时候声明之。
[javascript]
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) 是显式地使用的。但是当我们想要传递一些初始参数,则需写成:
[javascript]
modules: [
{
moduleClass: ColumnResizer,
detectWidth: 10
},
......
]
如果你感觉这种写法不够酷,那么还有另外一种写法,将其声明成grid的参数
[javascript]
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集合,而不是某一个特定的实现。
相关新闻>>
- 发表评论
-
- 最新评论 更多>>