【发布时间】:2023-04-07 07:56:03
【问题描述】:
我有一个具有以下配置的 ng-grid:
vm.gridOptions = {
data: 'vm.users',
showFilter: true,
columnDefs: [
{ field: 'firstName' },
{ field: 'lastName' },
{ field: 'email' }
]
};
vm.users 属性由 Breeze 查询的结果填充:
var query = breeze.EntityQuery.from('Users')
.where('firstName', 'startsWith', 'K');
return manager
.executeQuery(query)
.then(querySucceeded, _queryFailed);
这基本上有效。它以我期望的方式显示在网格中,但是当我尝试过滤时,无论我输入什么,所有内容都会被过滤掉。我能够在 ng-grid 中追踪到这部分代码:
var searchEntireRow = function(condition, item, fieldMap){
var result;
for (var prop in item) {
if (item.hasOwnProperty(prop)) { // <-- Works if I get rid of this condition
var c = fieldMap[prop.toLowerCase()];
if (!c) {
continue;
}
...
问题是,当 ng-grid 搜索实体 (item) 时,item 中存在必要的字段,但它们无法通过 hasOwnProperty 检查。如果我取消该检查,它会起作用,它甚至可能是安全的,因为它仍然会检查以确保 prop 存在于 fieldMap... 但我不愿做出这样的改变。
如果我进行投影而不是实体查询,它可以正常工作,但我不想丢失通过实体查询获得的缓存(我想我可以先进行实体查询,然后再针对缓存...)。有没有更好的方法让微风实体在 ng-grid 中可过滤,或者这是一个错误?
我正在使用 ng-grid 2.0.11 和 angular 1.2.15。
【问题讨论】:
-
我认为删除
hasOwnProperty检查是需要的。我知道您不想弄乱 ng-grid 代码,因为它会影响升级路径,但我不知道为什么首先要进行检查。 -
@SteveSchmitt,谢谢 - 我想我可能只需要走那条路
标签: javascript angularjs breeze ng-grid