我们如何过滤从REST服务组件获取数据的dojo网格(extlib组件)?我已经从REST服务组件正确地加载了来自视图的数据。我在xpage上还有一个下拉列表,用户可以在其中选择一个值,该值是同一视图中某一列的dbcolumn。我尝试过将REST服务键值设置为viewScope.filterCat01(这是组合框的变量),也尝试过在按钮中设置过滤器(BY是字段/列名),但似乎没有过滤它。有什么想法吗?在按钮中,当我检查网格属性时,它确实有效,所以我知道网格对象是有效的,但过滤器似乎什么都没做。我也试过做网格_refresh(),以及在REST服务组件中设置Keys。有没有特殊的方法来触发过滤器?
var filterValue = XSP.getElementById("#{id:comboBox2}").value;
var grid = dijit.byId("#{id:djxDataGrid1}");
grid.filter({ By: filterValue});
这绝对是您需要拼凑一千条神秘线索才能解决的问题之一(Domino-never!)。不管怎样,我去年不得不解决这个问题。下面是一个"搜索"按钮示例:
var searchText = dojo.byId('#{id:searchText}').value.replace(/"/g, '|"');
if (searchText) {
var ftSearchText = '[Title] CONTAINS "' + searchText + '" OR [Description] CONTAINS "' + searchText + '" OR [URL] CONTAINS "' + searchText + '"';
dijit.byId('#{id:grid}').filter('?search=(' + ftSearchText + ')', false);
} else {
dojo.byId('#{id:reset}').click();
}
正如你所看到的,当应用过滤器时,它正在进行ft搜索。关键是将"?search="放在筛选字符串的开头。
这是"重置"按钮的例子:
dojo.byId('#{id:searchText}').value="";
var grid = dijit.byId('#{id:grid}');
grid.filter("",true);
grid.store.close();
grid._refresh();
这是根据8.5.2开发的。在8.5.3中使用dojo 1.6.1可能有一些更干净的方法。
享受吧!