簡體   English   中英

如何在ng-grid中顯示和過濾Breeze實體?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM