【问题标题】:setPriority() deletes prioritysetPriority() 删除优先级
【发布时间】: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


【解决方案1】:

这是 Firebase 中的一个错误。目前我不确定原因,但似乎大于一定大小的数字没有被正确保存。完成后,我们将调查并更新此答案。

更新:此错误已解决。再试一次!

【讨论】:

  • 这个问题又出现了吗?我正在运行 2..5.2 并遇到同样的问题,当我将优先级转换为字符串时,它可以正常工作...
猜你喜欢
  • 2014-11-24
  • 1970-01-01
  • 2020-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多