【发布时间】:2016-05-29 00:53:30
【问题描述】:
我使用的是 firebase 3.0,我看到了 firebase 2.x 版本的示例,但它们似乎不适用于 3.0。我有一个简单的结构,我想按值排序返回给我。
{
"Regions" : {
"All" : 0,
"Eastern & Southern Africa" : 1,
"Global" : 6,
"Himalayas" : 2,
"Mekong" : 3,
"Mesoamerica" : 5,
"West Africa" : 4
}
}
我使用的代码返回 json,但是它不是按值排序的,它是按字母顺序排序的。
var config = {
apiKey: "xxxxxxxxxxxxxxxxxxxxxxxxxxx",
authDomain: "servir-activity-database.firebaseapp.com",
databaseURL: "https://servir-activity-database.firebaseio.com",
storageBucket: "",
};
firebase.initializeApp(config);
var theRegions;
firebase.database().ref('Regions/').orderByChild('value').on('value', function (regions) {
theRegions = regions.val();
loadRegions(theRegions);
});
function loadRegions(which)
{
$.each(which, function (i, value) {
$('#ddlRegions').append($('<option>').text(i).attr('value', value));
});
}
我意识到我可以在客户端进行排序,但这似乎是一件可以返回排序的简单事情,我可能错过了一些非常简单的事情。
【问题讨论】:
-
这可能是一个问题orderByChild('value'),因为您没有任何具有“value”键的子节点。您的子节点是“All”、“Global”、“Mekong”等。您还可以删除 Regions/ 中无关的斜线。另外......这只是一个想法,您应该将您的键名与数据分离。键可能由带有子 /location 和 /count 的 autoId 生成。然后您可以轻松地按位置或计数进行查询和排序。
-
感谢杰。我不确定我是否完全理解。我试图做的是按与键关联的值排序。所以他们会回来“全部”:0,“东部和南部非洲”:1,“喜马拉雅山”:2,而不是按字母顺序。我已经为每个键分配了正确顺序的值。能否请您多解释一下您的方法,以便我调整思路?
-
3.0 在这方面没有任何改变。如果要按值排序,请在回调中调用
ref.child("path/to/child").orderByValue(),然后调用snapshot.forEach(function(child) ...。
标签: sorting firebase firebase-realtime-database