【问题标题】:How do I filter a dojo grid on an xpage?如何过滤 xpage 上的道场网格?
【发布时间】:2012-04-18 19:57:56
【问题描述】:

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

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

【问题讨论】:

  • 你能显示整个 XPage 吗?您需要确保在更改组合框时刷新 Rest Service。
  • 我最后只是将 REST 服务搜索属性设置为 viewScope. 然后刷新 REST 服务对象,而不是尝试直接在客户端操作网格。我仍然不确定为什么它在客户端不起作用,但这个解决方案现在有效。

标签: xpages dojox.grid


【解决方案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 开发的。在 8.5.3 中使用 dojo 1.6.1 可能会有一些更简洁的方法。

享受吧!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多