2015-10-30 44 views
0

我基本上要做到这一点:如何在Firebase中订购儿童时按优先顺序排序?

var ref = new Firebase("[myapp].firebaseio.com"); 
var things = ref.child("things"); 
var thingsQuery = things.orderByPriority().orderByChild("owner").equalTo("[ownerKey]") 
var angularReadyThings = $firebaseArray(thingsQuery); 

我使用火力地堡的查询能力orderByChild()和equalTo()来获取数据的一个子集,并从该查询创建$ firebaseArray显示的一部分特定节点下的东西列表。用户可以通过拖放列表来设置每个项目的$优先级,并且我可以正确保存优先级,但是数据不是按照优先级(我认为是有意义的)重新排序。我不能像orderByChild()一样使用orderByPriority(),就像我上面在第3行(不支持多个orderBys)一样。在我的ng-repeat上使用orderBy:'$ priority'过滤器(我正在使用angular)工作,直到我拖放列表为止,此时这些项目会恢复到它们的检索(无序)状态。

有没有一种方法可以使用orderByChild()和equalTo()并获得按Firebase优先级排序的结果?

回答

2

Firebase只能按单一条件进行排序/过滤,无论是关键,子属性还是优先级。

看起来你只想过滤一个子属性,然后按优先顺序排序。在这种情况下,您可以使用Firebase查询执行ref.orderByChild("owner").equalTo(ownerKey)并重新订购客户端

备注:没有理由继续使用Firebase的旧优先级进行排序。只要添加一个名为子属性的具有相同的值就更清楚了。

+0

那么'onChildMoved'就会过时? –