2012-04-05 83 views
2

我们如何过滤从REST服务组件获取其数据的dojo网格(extlib组件)?我已经从REST服务组件正确加载了来自视图的数据。我还在xpage上有一个下拉列表,用户可以在其中选择一个值,该值是同一视图中某列的db列。我已经尝试将REST服务键值设置为viewScope.filterCat01(这是组合框的变量),我也尝试在按钮中设置过滤器(BY是字段/列名),但似乎没有过滤它。有任何想法吗?在按钮时,我检查网格属性,它确实工作,所以我知道网格对象是有效的 - 但过滤器似乎没有做任何事情。我也试着做一个grid._refresh()以及在REST服务组件中设置Keys而没有运气。有没有特别的方法来触发过滤器?如何过滤xpage上的dojo网格?

var filterValue = XSP.getElementById("#{id:comboBox2}").value; 
var grid = dijit.byId("#{id:djxDataGrid1}"); 
grid.filter({ By: filterValue}); 
+1

你能展示整个XPage吗?您需要确保在更改组合框时刷新Rest服务。 – stwissel 2012-04-05 08:11:20

+0

我终于将REST服务搜索属性设置为viewScope。 ,然后执行REST服务对象的刷新,而不是尝试直接在客户端操纵网格。我仍然不确定为什么它不适用于客户端,但此解决方案现在可行。 – Anil 2012-04-07 00:12:50

回答

1

这绝对是那些需要拼凑出一个千点神秘的线索去解决它的事情之一(多米诺 - 从不)。无论如何,去年我不得不去做这件事。这里有一个'搜索'按钮的例子:

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开发的。使用dojo 1.6.1可能会有一些更清晰的方法来处理8.5.3中的事情。

享受!