【发布时间】:2012-12-18 00:35:58
【问题描述】:
我正在处理有序数据并遇到了这个问题:
我使用 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”监听器,但我现在没有使用它。有什么想法吗?
【问题讨论】:
-
你确定得到的优先级是一个数字吗?您可能想在上面做一个
parseInt以确定。 -
副手我看不出你的代码有什么问题。您能否发布一个完整的示例(例如作为 jsfiddle)以便我们重现该行为?
-
绝对是一个数字。我将优先级强制设置为 10、20、30,并且代码按预期工作(例如,在 20 之前排序的 30 变为 19)可能是我的优先级太长的问题吗?当导出的优先级为:“1.355960702078E12”时,getPriority 返回“1355962092412”。这会很烦人,使用时间戳作为优先级听起来很聪明:)
-
对不起,我的评论中的优先级数字不是来自同一个项目。希望你能明白。
-
我赞同迈克尔的评论。您能否提供指向 JSFiddle 或其他完全正常(失败)示例的链接?
标签: firebase