breezejs:orderBy在将集合合并到缓存中的现有实体时不保留

时间:2013-06-11 06:55:42

标签: breeze

在缓存中,我有一个'Mandate'类型的实体。

然后我运行以下代码来获取MandateHistory实体的集合,然后通过breeze将其合并到Mandate实体的相应属性中:

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

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

请注意,orderBy子句是受到尊重的,结果按Id进行了正确排序。

然而,Mandate实体的collection属性中的项目未进行排序。我必须在这做一些特别的事吗?

1 个答案:

答案 0 :(得分:1)

按集合导航属性对返回值进行排序不是Breeze所做的事情。它将对查询的结果进行排序,但如果要排序,(并保持排序),您需要自己管理的实体的集合属性之一。

我认为你最好的两个选择是。

1)在显示前排序。即在显示之前调用任何集合上的排序方法。根据您使用的MVVM框架,通常会有“绑定”来完成此操作。

2)在导航属性返回的数组上订阅Breeze arrayChanged事件,并在看到change事件时随时调用数组上的sort。请注意,如果您在许多实体上订阅了很多属性,这可能会变得昂贵。