2013-06-03 59 views
0

我在授權實體類似這樣的檢索MandatesHistory集合:breezejs:分頁和延遲加載

var query = breeze.EntityQuery.from("MandatesHistory") 
       .where("Mandate.Id", "==", mandatId) 
       .expand("Mandate").skip(offset).take(pageSize).inlineCount(true); 

      return manager.executeQuery(query.using(service)); 

它的偉大工程的第一時間,收集填充了10條記錄(這是pageSize的價值)。

但是第二次,接下來的10條記錄被添加到集合中,而不是替換前面的10條。所以當我滾動頁面時,集合不斷增長。

很顯然,我的分頁不再有效,因爲它只需要每頁10條記錄,即在任何給定時間收集10條記錄。

這是預期的行爲?如果我指定skip和take,我寧願在每次查詢後都會覆蓋該集合。

回答

0

不完全確定我明白這個問題。我不確定你指的是什麼「集合」,但我認爲問題的一部分是對查詢結果與EntityManager緩存內容的誤解。當用skip和take執行查詢時,查詢返回的結果(通常在 ...方法中)實際上就是您想要的結果。即在您的案例中恰好有10條記錄。 (假設pageSize爲10)。

var query = breeze.EntityQuery.from("MandatesHistory") 
      .where("Mandate.Id", "==", mandatId) 
      .expand("Mandate").skip(offset).take(pageSize).inlineCount(true); 


manager.executeQuery(query.using(service)).then(data) { 
    var next10items = data.results; // this will always be 10 (or less) records. 
}); 

另一方面,EntityManager的緩存會隨着它看到的每個「新」頁面的數據而增長。但總的來說,你不應該在乎這一點。您應該每次使用查詢的結果。

這是否有意義?

+0

問題是,我已經綁定到我的實體的集合屬性(使用angularjs),通過我的實體循環顯示分頁表中的記錄。但是,我只想顯示查詢返回的十條記錄,根據我所在的頁面。也許我應該直接綁定到結果而不是實體的屬性。這樣我就可以避免緩存問題,但我覺得這很不方便。這更清楚嗎? – Sam

+0

抱歉,不是真的:)如果您創建了集合並且只想綁定到其中的10條記錄,那麼只需在將集合填充到查詢結果之前清除該集合即可。我想我一定會錯過一些東西。 –

+0

我填寫收藏的方式不允許我事先清除。我使用擴展,我讓微風融合與現有的實體集合(在緩存中) – Sam