我正在尝试按照数字优先级重新排序(交换)子项。 这是我的尝试:
var swapChildrenByPriority = function(url, child1Priority, child2Priority){
var ref = new Firebase(url);
var child1, child2;
ref.on('value', function(snap){
snap.forEach(function(child){
if(child.getPriority() === child1Priority){
child1 = child;
};
if(child.getPriority() === child2Priority){
child2 = child;
};
});
});
ref.child(child1.name()).setPriority(child2.getPriority());
ref.child(child2.name()).setPriority(child1.getPriority());
};
你可以想象,这不起作用。 调用此函数时,Chrome的控制台会向我抛出错误:
TypeError: Cannot call method 'name' of undefined
Uncaught TypeError: Cannot call method 'name' of undefined
看起来孩子们没有优先权设定。如果我在Forge中导入我的数据,则所有孩子都拥有“.priority”属性:5.0 当我再次调用该函数时,为了确保,我得到了这个:
TypeError: Object https://test.firebaseio.com/testPriority has no method 'child'
在firebase中执行此操作的正确方法是什么?
另外,如何在AngularFire中做同样的事情,以便使用angularFire服务的指令范围内的数据相应地重新排序,并且视图会被刷新?
我非常感谢你的时间,
至于
贾里德
答案 0 :(得分:4)
将函数放在DB的回调中:
fb.on('value', function(snap){
snap.forEach(function(child){
if(child.getPriority() === child1Priority) {
child1 = child;
}
if(child.getPriority() === child2Priority){
child2 = child;
};
});
ref.child(child1.name()).setPriority(child2.getPriority());
ref.child(child2.name()).setPriority(child1.getPriority());
});