[英]How to display and filter Breeze entities in ng-grid?
我有一個具有以下配置的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
……但我fieldMap
進行此類更改。
如果我執行投影而不是實體查詢,則可以正常工作,但是我不想丟失實體查詢獲得的緩存(我想我可以先進行實體查詢,然后再對緩存進行投影查詢。 )。 有沒有更好的方法可以使微風實體在ng-grid中可過濾,還是這是一個錯誤?
我正在使用ng-grid 2.0.11和angular 1.2.15。
如果您的模型庫是“ backingStore”(對於Angular應用程序而言),那么您的實體屬性都不是“自有”屬性。 它們都是在實體類型的構造函數原型上作為ES5屬性實現的。
如果您確實想限制過濾器查看對象的即時數據屬性(而不是繼承的數據屬性),則可以這樣編寫:
var proto = Object.getPrototypeOf(obj);
for (var key in obj) {if (obj.hasOwnProperty(key)) /* your logic here */;}
可以理解,這會拾取一些Breeze屬性以及諸如entityAspect
並且如果您的模型中有任何實體繼承,也不會檢測到“基類”的屬性。
現在您知道為什么了,您可以決定如何進行。
請注意,每種Breeze實體類型都有圓度。 至少, x.entityAspect.entity
指向x
。 對於某些第三方控制來說,這是一個問題。 我不知道ng-Grid是否有問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.