简述
与ListDropDown所不同的是其下拉数据不是通过items属性定义的,DataSetDropDown没有提供items属性,但是却提供了dataSet和dataPath属性,通过这两个属性可以将DataSetDropDown绑定到DataSet内部的一个EntityList集合对象上。
详细属性说明
基本属性和使用方式通过:ListDropDown(DCUG)
filterMode
数据过滤模式。
目前支持以下几种取值:
- clientSide - 在客户端执行过滤。
- serverSide - 在服务端执行过滤。此模式仅在useDataBinding为true是有效。
@DataProvider public Collection<Product> getProducts(Map<String, Object> parameter) { String productName = (String)parameter.get("filterValue");//注意参数名为filterValue return productDao.find("from Product where category.productName ='" + productName + "'"); }
另外DataSetDropDown还提供了onSetFilterParameter事件,通过该事件自定义filterValue的值:
//@Bind #dataSetDropDown.onSetFilterParameter !function(self, arg) { arg.filterValue = "自定义的值"; }
甚至直接动态的设置DataSetDropDown所绑定DataSet的其他参数值:
//@Bind #dataSetDropDown.onSetFilterParameter !function(self, arg) { arg.dataSet.set("parameter",{ categoryId:1, deptId:"SH001" }); }
filterOnTyping
与ListDropDown中filterOnTyping的默认值为true不同,考虑到大量AJAX请求给服务器带来的压力,DataSetDropDown该属性的默认值为false。
reloadDataOnOpen
是否要在每次下拉框打开时重新装载数据。
该功能对与一些实时性要求较高的下拉框很有帮助,如查看在线用户下拉框,或界面上的联动下拉框,如下图中的产品名称下拉框:
由于用户可能会随时修改分类名称,我们希望产品名称下拉框打开的时候始终都与产品分类名称相关。那么在很多情况下就可以打开这个属性实现。
useDataBinding
是否在下拉框与DataSet之间建立数据绑定。
如果设置为true,表示下拉框中创建的将是数据控件与DataSet建立数据绑定,这样下拉框中可以实时的反应DataSet中的数据变化。 并且如果在这种情况下启用数据过滤功能,实际的数据过滤动作也将交由DataSet来完成,即利用绑定DataSet的数据重装载功能。 此时如果发生数据过滤,onFilterItem事件是不会被触发的。
如果设置为false,表示下拉框只在初始化是从DataSet中一次性的读取下拉数据,之后与DataSet不再产生关系。 并且后续的数据过滤等操作也将与dorado.widget.ListDropDown的实现方式一致。 此时如果发生数据过滤,onSetFilterParameter事件是不会被触发的。
技巧参考
google搜索栏效果的实现
确保DataSetDropDown以下几个属性的设置:
属性 | 值 |
---|---|
useDataBinding | true |
filterMode | serverSide |
autoOpen | true |
buttonVisible | false |
dynaFilter | true |
filterOnTyping | true |