我正在处理有序数据并遇到了这个问题:
我使用 push() 将项目添加到一个位置,并将它们的优先级设置为以毫秒为单位的创建日期,因此它们按日期排序。当我尝试更改项目的顺序时,我找到下一个或上一个(如果没有下一个)项目并获得它的优先级,然后我添加或减去一个并将移动项目的优先级设置为结果。我获取了优先级,但是当我调用 setPriority() 时,该项目失去了优先级。使用图形调试器导出项目不会为每个移动的项目返回优先级。为未移动的项目返回正确的优先级。
一些代码:
/* id 是被移动的 div 的 id 使用 jquery ui 的可排序 div id 的组成类似于 "item_" + firebaseref.name() */ 名称 = id.substr(id.indexOf('_') + 1); id2 = $('#' + id).next().attr('id'); 如果(id2){ name2 = id2.substr(id2.indexOf('_') + 1); itemRef = rootRef.child('path/to/my/items/'+name2); itemRef.once('value', function (dataSnapshot){ var pr = Number(dataSnapshot.getPriority()), myRef = rootRef.child('path/to/my/items/'+name); myRef.setPriority(pr - 1); // 尝试 this 或 toString 如下 }); } 别的 { // 尝试上一项 id2 = $('#' + id).prev().attr('id'); 如果(id2){ name2 = id2.substr(id2.indexOf('_') + 1); itemRef = rootRef.child('path/to/my/items/'+name2); itemRef.once('value', function (dataSnapshot){ var pr = Number(dataSnapshot.getPriority()) + 1, myRef = rootRef.child('path/to/my/items/'+name); myRef.setPriority(pr.toString()); }); } }
我有一个“child_moved”监听器,但我现在没有使用它。有任何想法吗?